私がやろうとしているのは、プロジェクトに含まれているHTMLページを表示する(編集しない)機能を作成することです。ウェルカムページにはすでにWebブラウザが埋め込まれているため、その候補として適しているようです。
キュリオスなぜ?これが背景情報のある質問です。
これが私があなたのために特別に作った解決策です...
ここからソースをダウンロードし、Delphiでパッケージを抽出してロードします(Delphi XEで作成しましたが、どのバージョンでもロードされます!ただし、XEより前のバージョンのプロジェクトオプションでユニット出力パスを変更する必要があります) ...パッケージをインストールします。
[ヘルプ]メニューで、 [ブラウザの作成]を見つけてクリックします。これにより、私のブログに移動するタブが作成されて表示されます(例として)。
ニーズに合わせて簡単に変更できます!ヘルプメニューの項目コードはにありEditWizard.MenuItem.pas
、無視してかまいません。クリックすると呼び出しが行われることに注意してください(BorlandIDEServices as IOTAEditorViewServices).ShowEditorView(CreateTab('http://www.simonjstuart.com'));
。これにより、実際にブラウザタブインスタンスが作成されます。
ブラウザタブのすべてのコード(フレームレイアウトを含む)はに含まれEditorWizard.Frame.pas
ているため、ニーズに合わせて簡単に変更できます。
ユニットEditorWizard.Wizard.pas
には、カスタムブラウザタブをIDEに登録するために必要な少量のコードが含まれています。
もちろん、ある程度の調整が必要になりますが、これは確かに、あなたがやろうとしていることの非常に受け入れられる基盤として役立つはずです。
楽しみ :)
このようなハックを使用する場合は、次のようにします。
type
TOpenNewURLModule = procedure(const URL: string; EditorForm: TCustomForm);
procedure OpenURL(const URL: string);
var
EditWindow: INTAEditWindow;
Lib: HMODULE;
OpenNewURLModule: TOpenNewURLModule;
begin
EditWindow := (BorlandIDEServices as INTAEditorServices).TopEditWindow;
if not Assigned(EditWindow) or not Assigned(EditWindow.Form) then
Exit;
Lib := GetModuleHandle('startpageide150.bpl');
if Lib = 0 then
Exit;
OpenNewURLModule := GetProcAddress(Lib, '@Urlmodule@OpenNewURLModule$qqrx20System@UnicodeStringp22Editorform@TEditWindow');
if @OpenNewURLModule <> nil then
OpenNewURLModule(URL, EditWindow.Form);
end;
短所:
編集:既存の開いているウェルカムページを再利用したり、このハックを古いバージョンのDelphiと互換性を持たせたりすることは可能のようです。以下に、DelphiXEとDelphi2007の2つの選択肢を示します(どちらも機能しているようです)。
type
IURLModule = interface(IOTAModuleData)
['{9D215B02-6073-45DC-B007-1A2DBCE2D693}']
function GetURL: string;
procedure SetURL(const URL: string);
property URL: string read GetURL write SetURL;
end;
TOpenNewURLModule = procedure(const URL: string; EditorForm: TCustomForm);
function FindURLModule: IURLModule;
var
I: Integer;
begin
Result := nil;
with BorlandIDEServices as IOTAModuleServices do
for I := 0 to ModuleCount - 1 do
if Supports(Modules[I], IURLModule, Result) then
Break;
end;
procedure OpenURL(const URL: string; ReuseExistingView: Boolean = True);
{$IFDEF VER220} // Delphi XE
const
SStartPageIDE = 'startpageide150.bpl';
SOpenNewURLModule = '@Urlmodule@OpenNewURLModule$qqrx20System@UnicodeStringp22Editorform@TEditWindow';
{$ENDIF}
{$IFDEF VER185} // Delphi 2007
const
SStartPageIDE = 'startpageide100.bpl';
SOpenNewURLModule = '@Urlmodule@OpenNewURLModule$qqrx17System@AnsiStringp22Editorform@TEditWindow';
{$ENDIF}
var
Module: IURLModule;
EditWindow: INTAEditWindow;
Lib: HMODULE;
OpenNewURLModule: TOpenNewURLModule;
begin
EditWindow := nil;
Module := nil;
if ReuseExistingView then
Module := FindURLModule;
if Assigned(Module) then
begin
Module.URL := URL;
(Module as IOTAModule).Show;
end
else
begin
{$IFDEF VER220}
EditWindow := (BorlandIDEServices as INTAEditorServices).TopEditWindow;
{$ENDIF}
{$IFDEF VER185}
if Assigned((BorlandIDEServices as IOTAEditorServices).TopView) then
EditWindow := (BorlandIDEServices as IOTAEditorServices).TopView.GetEditWindow;
{$ENDIF}
if not Assigned(EditWindow) or not Assigned(EditWindow.Form) then
Exit;
Lib := GetModuleHandle(SStartPageIDE);
if Lib = 0 then
Exit;
OpenNewURLModule := GetProcAddress(Lib, SOpenNewURLModule);
if @OpenNewURLModule <> nil then
OpenNewURLModule(URL, EditWindow.Form);
end;
end;
残りの短所:
他のバージョンとの互換性が必要な場合は、おそらくこれを出発点として使用できます。
HTMLをロードできるコンポーネントを含む独自TForm
のコンポーネントを表示することをお勧めします。TWebBrowser