CEF4Delphiで実行時にコントロールのサイズが小さくなる

解決


りん  2026-03-09 13:18:47  No: 152235

こんにちはです。
CEF4Delphiで質問なんですがxmary様のページを見て挑戦しているのですが

D7で実行を行うとで実行時にデザイン画面のサイズより、全てのコントロールのサイズが小さく表示されてしまいます。
これは、小さくなるのを見越してサイズ定義を大き目で作るしかないのでしょうか?自動でデザインフォームと同じサイズになってくれるのが理想なんですが。


Mr.XRAY  2026-03-11 19:07:09  No: 152236

CEF4Delph は古いバージョンの Chromium ベースのコントロールです。
余計なお世話かも知れませんが、
WebView4Delphi コンポーネントの利用を考えてみてはいかがでしょうか。

https://github.com/salvadordf/WebView4Delphi


りん  2026-03-14 09:48:30  No: 152237

おはようございます。

WebView4Delphi コンポーネントの情報ありがとうございます。
こだわりがあるわけではないので移行さてもらおうとおもいます。

このコントロールですが
Mr.XRAY様のページの下記が理解できなく、サンプルの動作までいかずに見送っていた感じです。

initialization
  GlobalWebView2Loader := TWVLoader.Create(nil);
  GlobalWebView2Loader.UserDataFolder := ExtractFileDir(Application.ExeName)
                                       + '\CustomCache';
  GlobalWebView2Loader.StartWebView2;

この感じに使うには GlobalWebView2Loaderの宣言が必要だと思うのですが
宣言もコントロールもなく、他の方のページでもこのように表記されていのですが
エラーになり使えない感じなのです。これはどこから来るものなのでしょうか?またdLLの読み込みもCEF4Delphiのように
定義しなくても使えるのかもぎもんにかんじています。


りん  2026-03-14 21:52:43  No: 152238

usesすることによりinitialization部分でエラーはなくなり
ました。

 InitializationErrorの部分の wvstring型でエラーが出ますが、ここもなにかusesすればいいと思うので、これからいろいろ使い方を調べていきたいと思います。

まずは、最初の1回目のみ読み込みに時間がかかる対策を探してみたいと思います。

どうもありございました。


mam  URL  2026-03-17 12:02:50  No: 152239

参考になるかどうかわかりませんが、以下はどうでしょうか。

https://mam-mam.net/delphi/tedgebrowser_webview4delphi.html


りん  2026-04-22 08:54:45  No: 152246

1つ1つusesして確認していったところ無事動作いたしました。ありがとうございます。

もしかして、mamさんは、あの黒い帯のページの運営者様なのですか。
もしそうだとしあたら、IMEのきじありがとうございました。

前にF7等でIMEを切り替えようとしたときにボタンのhandleが認識されできなかったんですよね。
そこで、speedボタンはhandleがないと記事を見て無事解決しました。

あそこのページ、面白いこといろいろしていて楽しいですよね。
もし、今後、WebView4Delphi の記事をかく事がありましたら、カーソルの下のソースの参照やコントロールに
フォーカスが当たった時のイベントの取得やソースを高速で取得する方法等書いていただけると助かります。

あっ。紹介いただいたページにも掲示板があったので、そこでとりしたほうが賑やかになっていいかな(>_<)


mam  2026-04-23 15:40:53  No: 152251

あの黒い帯のページの運営者かもです。

カーソルの下のソースの参照や特定のコントロールにフォーカスが当たった時のイベントの取得は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;


りん  2026-04-26 15:22:00  No: 152257

思っていた通りの動作でした。
ありがとうございました。


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

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







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