小编cad*_*ill的帖子

如何在Chromium中加载页面时可靠地知道(以编程方式)

我在使用TChromium(DCEF1)的OnLoadEnd事件时遇到问题.

我有一个带有TButton和TChromium的表格.

按钮的OnClick事件调用一个函数,该函数列出已加载页面的形式.如果我等待页面完成加载然后单击按钮,此功能正常; 但是如果我从TChromium OnLoadEnd事件处理程序调用此函数,则永远不会调用回调函数,因此,我得到一个空列表.

按钮代码(将注释读入代码):

procedure TForm2.Button3Click(Sender: TObject);
var
  Q: TWebChromium;
begin
  Q := TWebChromium.Create(Chromium1); // <- class to access DOM
  Q.WebFormNames; // <- method to get forms name
  ShowMessage(Q.Forms.Text); // <- show forms
end;
Run Code Online (Sandbox Code Playgroud)

OnLoadEnd代码:

procedure TForm2.Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser;
  const frame: ICefFrame; httpStatusCode: Integer; out Result: Boolean);
begin
  if (browser <> nil) and (browser.GetWindowHandle = TChromium(Sender).BrowserHandle) and ((frame = nil) or (frame.IsMain)) then
  begin
    Button3Click(nil);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

获取表单名称的方法代码(将注释读入代码):

procedure TWebChromium.WebFormNames;
var
  Finish: Boolean;
  EndTime: TTime;
begin …
Run Code Online (Sandbox Code Playgroud)

delphi chromium tchromium

6
推荐指数
1
解决办法
3750
查看次数

Chromium:如何获取所有形式的加载页面

我尝试获取所有加载页面形式的名称.我这样做了:

procedure TForm2.Button2Click(Sender: TObject);
var
  L: TStringList;
begin
  L := TStringList.Create;

  try
    Chromium1.Browser.MainFrame.VisitDomProc(
      procedure (const doc: ICefDomDocument)
        procedure IterateNodes(Node: ICefDomNode);
        begin
          if not Assigned(Node) then Exit;
          repeat
            if Node.ElementTagName = 'FORM' then
              L.Add(Node.GetElementAttribute('name'));

            if Node.HasChildren then IterateNodes(Node.FirstChild);

            Node := Node.NextSibling;
          until not Assigned(Node);
        end;
      begin
        IterateNodes(doc.Body);
      end
    );

    ShowMessage(L.Text);
  finally
    FreeAndNil(L);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

但我没有任何结果.任何的想法?

谢谢

delphi chromium tchromium

5
推荐指数
1
解决办法
4776
查看次数

创建一个与VCL和FMX兼容的新组件

我正在做一些组件,我想使它们与VCL和FMX兼容。所以我有一个遵循这种模式的结构:

General_dpk(使用TCustomMyClass)+ VCL_dpk(使用TMyClass)+ FMX_dpk(使用TMyClassFMX)

每个软件包都有其注册过程,用于注册其组件。在组件面板中会同时出现两个组件(VCL和FMX)。怎么做才能像其他Delphi组件那样仅根据所选项目的类型(VCL或FMX)显示组件?

谢谢

delphi

5
推荐指数
1
解决办法
1789
查看次数

使用 Firebird 子查询中的多列

我正在寻找在 Firebird 中执行此操作的方法

 SELECT  field1, field2, field3
 FROM table1
 WHERE (field1, field2) IN
            (SELECT fieldA, fieldB
             FROM table2
             WHERE fieldA = 'XXXXX')
Run Code Online (Sandbox Code Playgroud)

我搜索了一个解决方案,找到了一些适用于其他数据库的解决方案,但没有找到适用于 Firebird 的解决方案。

问候

firebird

5
推荐指数
1
解决办法
3581
查看次数

知道折线路径变量何时发生变化

我有一个可编辑的折线,我需要知道这条折线何时改变它们的路径变量.可以在我的折线中添加一个新事件("path_change"或类似的东西)吗?

谢谢

关心cadetill

javascript google-maps google-maps-api-3

4
推荐指数
1
解决办法
2466
查看次数

4
推荐指数
1
解决办法
5087
查看次数