導入
Web プログラム開発は、ユーザーの多様なニーズに直面して、デスクトップ アプリケーションや C/S プログラム開発用、ミドルウェア開発用、Web 開発用など、数多くの開発プラットフォームを立ち上げています。サーバー。その結果、プログラマーは、開始する方法のない多数のツールに直面することになります。
DELPHI は他の開発ツールと異なり、オープンシステムであるため、一部の制御を柔軟に利用することで、N-Tie プログラム、マルチスレッドプログラム、分散コンピューティングプログラム (DCOM や CORBAR を含む) など、さまざまなタイプのシステムを開発できます。 )、TCP プログラム、Web プログラム、ActiveX、ミドルウェア、プッシュ プログラム、さらにはアセンブリ プログラムの作成にも使用できます。
DELPHI は、ISAPI/NSAPI/CGI/WCGI などを 1 つのクラスに巧みにカプセル化します。ユーザーは、コンパイル中にコンパイル結果を選択する限り、さまざまなシステムを取得できます。
DELPHI4では、InPRiseはWebプログラム開発のサポートをさらに強化し、より優れた、より強力なシステムを開発できるようになりました。以下に、Web アプリケーション開発における一般的な問題をいくつか示しますので、参考にしてください。特別なステートメントがない場合は、プログラムが DELPHI 4 で実行されていることを意味します。
Web サーバー アプリケーションから画像を返すにはどうすればよいですか?
Web サーバー アプリケーションは、複雑なページ ドキュメントを生成するだけでなく、ユーザーの要求に応じてさまざまな画像を返すこともできます。もちろん、入力パラメータに応じて、<img src...> タグが異なる URL アドレスを指す、より簡単な方法もあります。ここではこのメソッドを使用しませんが、DLL を使用して画像を返します。
もちろん、最初に次のコンテンツを含むページ コンテナ (ページ プロデューサー) を作成する必要があります。
〈html〉
<body>これはテストです<BR><img src=”/scripts/mydll.dll/picture”></body>
〈/html〉
次に、PathInfo に対応するアクション イベントを設定し、画像の結果を返します。ソース コードは次のとおりです。
(注: JPEG ユニットはユニット宣言に含める必要があります)
プロシージャ TWebModule1.WebModule1WebActionItem1Action(送信者: TObject;リクエスト: TWebRequest; 応答: TWebResponse; 処理される変数: Boolean);
変数
JPG: TJpegImage;
S: Tメモリストリーム;
始める
JPG := TJpegImage.Create;
試す
Jpg.LoadFromFile('test');
S := TMemoryStream.Create;
試す
JPG.SaveToStream(S);
S.位置 := 0;
Response.ContentType := 'image/jpeg';
Response.ContentStream := S;
//ストリームがリリースされる前に完了する必要があります
応答.SendResponse;
ついに
S.フリー。
終わり;
ついに
JPG.無料;
終わり;
終わり;
実際、この方法は上記の単純な方法よりも安全で柔軟です。柔軟に使えるところもあり、それをベースに少し手を加えるだけで、一般的な開発ツールでは実現が難しい効果を生み出すことができます。
ISAPI/NSAPI ダイナミック リンク ライブラリ (DLL) でネイティブ アクセス ドライバーを使用するにはどうすればよいですか?
これは、DAO 3.0 や DAO 3.5 がいわゆるスレッドセーフ (スレッドセーフなプログラム) であり、Web サーバー (IIS など) がユーザーの要求に応じて複数のスレッドを生成し、ISAPI に対応する DLL もリストに掲載されるためです。スレッド。現時点では、ISAPI は BDE を通じて DAO に通知し、スレッド セーフティ規制に準拠していないことを伝えます。
Access 95/97 ライブラリにアクセスする必要がある場合は、ODBC 経由でアクセスできます。 ODBC は DAO を経由せず、スレッドセーフなプログラムでもあります。さらに、BDE から Access 95/97 に直接アクセスできる、より効率的なサードパーティ製コントロール セットがいくつかあります。
ユーザーが Web サーバー上の ISAPI DLL にアクセスすると、ファイルは存在するにもかかわらず、「無効なファイル名」と報告されます。ちなみに、私のデータベースは Novell サーバー上にあります。これはなぜでしょうか?
IUSR_XXX アカウントに対応するドライブ パス マッピング (MAPING) が構成されていません。 Novell は FAT を使用しないため、パス マッピングを手動で追加する必要があります。もちろん、ブート ログイン スクリプトにすることもできます。 IIS を Web サーバーとして実行しており、ファイル サーバーまたはデータベース サーバーとして Novell に関与している場合は、パス マッピングを定義する必要があることに注意してください。
「エイリアス {alias_name} の構成パラメーターが無効です」 (無効なエイリアス構成)。ODBC DSN を設定し、それを介して ISAPI/NSAPI サーバーにアクセスすると、このようなエラーが発生します。
アクセス ユーザー (IIS ユーザー) の ODBC エイリアスを作成する場合は、「ユーザー DNS」がデフォルト設定ですが、「ユーザー DNS」を作成するのではなく、SYSTEM DSN (システム DNS) を作成するように注意してください。
クライアント(アクセスマシン)の名前とIPアドレスを取得するにはどうすればよいですか?
TCP 制御を使用すると、この機能を非常に簡単に実装できます。インターネット ページから TCP コントロールを選択し、必要なものを直接入手します。
Memo1.Lines.Add(TCP1.LocalHostName);
Memo1.Lines.Add(TCP1.LocalIp);
もちろん、これをしたくない場合は、より複雑な方法があります。
Winsock を使用します。
プロシージャ TForm1.FormCreate(送信者: TObject);
変数
wVersionRequested : Word;
wsaデータ : TWSAデータ;
始める
{WinSock の作成}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);
終わり;
プロシージャ TForm1.Button1Click(送信者: TObject);
変数
p:PHOSTEnt;
s : 文字の配列[0..128]。
p2: pchar;
始める
{コンピュータ名を取得}
Getホスト名(@s,128);
p:=GetHostByName(@s);
Memo1.Lines.Add(p^.h_Name);
{マシンの IP アドレスを取得する}
p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
Memo1.Lines.Add(p2);
終わり;
プロシージャ TForm1.FormDestroy(送信者: TObject);
始める
{WinSock をリリースする}
WSACクリーンアップ;
終わり;
これは WINSOCK と呼ばれる独立したユニットで、プログラムに直接埋め込むことができます。
DELPHI 3 では真のマルチスレッド DLL を作成できないのはなぜですか?
DELPHI3 の ISAPI DLL ウィザードは、マルチスレッド DLL を作成するための多くのコードを生成しましたが、依然として重大な欠陥があります。それは、このアプリケーションがマルチスレッド プログラムであることを宣言していないということです。したがって、次の文を追加する必要があります。
IsMultiThread := TRUE;
この文を DPR プログラムの begin-end ブロックの先頭に配置し、最初の文にします。
現在インターネットに接続しているかどうかを確認するにはどうすればよいですか?
最も簡単な方法は、TCP コンポーネントを使用して現在の IP を取得し、その IP を判断してインターネットに接続されているかどうかを判断することです。例えば:
TCP1.LocalIp = '0.0.0.0' の場合
ShowMessage('現在インターネットに接続されていません!');
なお、インターネットとイントラネットには本質的な違いはないため、インターネットに接続されているのか、単にイントラネットに接続されているだけなのかを判断することは一般的には不可能です。確かに。 PING コンポーネントを追加して、比較的安定した高速なサイトに PING することもできます。接続されている場合は、インターネットにアクセスできます。ただし、この方法はあまり汎用性がありません。
Web ページを印刷するにはどうすればよいですか?
HTML コントロールの AutoPrint メソッドの使用を選択できます。例えば:
プリンターを使用します。
プロシージャ TForm1.Button1Click(送信者: TObject);
変数
OldCur: TCursor;
始める
OldCur := Screen.Cursor;
プリンターで行う
始める
ドキュメントを開始します。
HTML1.AutoPrint(ハンドル);
タイトル := HTML1.URL;
エンドドキュメント;
終わり;
Screen.Cursor := OldCur;
終わり;
さらに、PrintPage メソッドを使用することもできます。ただし、AutoPrint の使用をお勧めします。このコントロールはより柔軟で、印刷したくない一部のコンテンツをフィルターできるためです。
著者のブログ: http://blog.csdn.net/zou5655/