こんにちはです。
CEF4Delphiで質問なんですがxmary様のページを見て挑戦しているのですが
D7で実行を行うとで実行時にデザイン画面のサイズより、全てのコントロールのサイズが小さく表示されてしまいます。
これは、小さくなるのを見越してサイズ定義を大き目で作るしかないのでしょうか?自動でデザインフォームと同じサイズになってくれるのが理想なんですが。
CEF4Delph は古いバージョンの Chromium ベースのコントロールです。
余計なお世話かも知れませんが、
WebView4Delphi コンポーネントの利用を考えてみてはいかがでしょうか。
https://github.com/salvadordf/WebView4Delphi
おはようございます。
WebView4Delphi コンポーネントの情報ありがとうございます。
こだわりがあるわけではないので移行さてもらおうとおもいます。
このコントロールですが
Mr.XRAY様のページの下記が理解できなく、サンプルの動作までいかずに見送っていた感じです。
initialization
GlobalWebView2Loader := TWVLoader.Create(nil);
GlobalWebView2Loader.UserDataFolder := ExtractFileDir(Application.ExeName)
+ '\CustomCache';
GlobalWebView2Loader.StartWebView2;
この感じに使うには GlobalWebView2Loaderの宣言が必要だと思うのですが
宣言もコントロールもなく、他の方のページでもこのように表記されていのですが
エラーになり使えない感じなのです。これはどこから来るものなのでしょうか?またdLLの読み込みもCEF4Delphiのように
定義しなくても使えるのかもぎもんにかんじています。
usesすることによりinitialization部分でエラーはなくなり
ました。
InitializationErrorの部分の wvstring型でエラーが出ますが、ここもなにかusesすればいいと思うので、これからいろいろ使い方を調べていきたいと思います。
まずは、最初の1回目のみ読み込みに時間がかかる対策を探してみたいと思います。
どうもありございました。
参考になるかどうかわかりませんが、以下はどうでしょうか。
https://mam-mam.net/delphi/tedgebrowser_webview4delphi.html
1つ1つusesして確認していったところ無事動作いたしました。ありがとうございます。
もしかして、mamさんは、あの黒い帯のページの運営者様なのですか。
もしそうだとしあたら、IMEのきじありがとうございました。
前にF7等でIMEを切り替えようとしたときにボタンのhandleが認識されできなかったんですよね。
そこで、speedボタンはhandleがないと記事を見て無事解決しました。
あそこのページ、面白いこといろいろしていて楽しいですよね。
もし、今後、WebView4Delphi の記事をかく事がありましたら、カーソルの下のソースの参照やコントロールに
フォーカスが当たった時のイベントの取得やソースを高速で取得する方法等書いていただけると助かります。
あっ。紹介いただいたページにも掲示板があったので、そこでとりしたほうが賑やかになっていいかな(>_<)
あの黒い帯のページの運営者かもです。
カーソルの下のソースの参照や特定のコントロールにフォーカスが当たった時のイベントの取得はJavascriptで可能だと思います。
procedure TForm1.WVBrowser1DOMContentLoaded(Sender: TObject;
const aWebView: ICoreWebView2;
const aArgs: ICoreWebView2DOMContentLoadedEventArgs);
var pwc:PWideChar;
begin
//URLを移動した時にURLを表示する
aWebView.Get_Source(pwc);
Edit1.Text:=pwc;
if pwc='https://mam-mam.net/' then
begin
WVBrowser1.ExecuteScript(
'document.querySelector("h1").addEventListener("mousemove",function(){'+
'console.log("mouse_moving on h1");'+
'});'
);
WVBrowser1.ExecuteScript(
'window.addEventListener("mousemove",function(event){'+
//ビューポート座標から要素を取得
'let elm=document.elementFromPoint(event.clientX, event.clientY);'+
//要素のタグ名,マウスのページ全体基準の座標を取得
'if(elm!=null){'+
'console.log('+
'"element:"+elm.innerHTML+",x:"+event.pageX+",y:"+event.pageY'+
');'+
'}'+
'});'
);
end;
end;
procedure TForm1.WVBrowser1DevToolsProtocolEventReceived(Sender: TObject;
const aWebView: ICoreWebView2;
const aArgs: ICoreWebView2DevToolsProtocolEventReceivedEventArgs;
const aEventName: wvstring; aEventID: Integer);
var pwc:PChar;
begin
//jsonの値をそのまま出力
aArgs.Get_ParameterObjectAsJson(pwc);
Memo1.Lines.Add(pwc);
end;
procedure TForm1.FormCreate(Sender: TObject);
var ct:integer;
begin
WVWindowParent1.Browser:=WVBrowser1;
if GlobalWebView2Loader.InitializationError then
begin
ShowMessage(GlobalWebView2Loader.ErrorMessage);
end
else
begin
ct:=0;
while (ct<20) and (not GlobalWebView2Loader.Initialized) do
begin
sleep(500);
Application.ProcessMessages;
inc(ct);
end;
if GlobalWebView2Loader.Initialized then
begin
WVBrowser1.CreateBrowser(WVWindowParent1.Handle);
WVBrowser1.DefaultURL:='https://mam-mam.net/';
end
else
begin
ShowMessage('WebView2初期化失敗');
end;
end;
end;
思っていた通りの動作でした。
ありがとうございました。
| ツイート |
|