在Delphi中获取字符串的html表单和字段



我有一个系统,它每1秒通过GET获取一个html来更新这个html中的系统数据。html可以有1-20个表单,需要采取所有表单并组装每个表单的查询字符串字段,我有一种函数可以做到这一点,问题是它比获取服务器html花费的时间更长,代码怎么了?或者如何以不同的方式做到这一点?

procedure XThread.GetForms;
var
  sTemp, xResF : String;
  FormItem, v: Variant;
  Field: Variant;
  J, q, i, contCampos,
  tmForm : Integer;
  IDocForm : IHTMLDocument2;
begin
 IDocForm := CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
 v := VarArrayCreate([0, 0], VarVariant);
 v[0] := strFormMAT; //string html
 IDocForm.Write(PSafeArray(System.TVarData(v).VArray));
 IDocForm.Close;
 tmForm := (IDocForm.all.tags('FORM') as IHTMLElementCollection).Length;
 SetLength(matFormsArray, 0); //matFormsArray = Global Array of Array
 SetLength(matFormsArray, tmForm);
 for q := 0 to tmForm -1 do
   begin
    SetLength(matFormsArray[q], 2);
    FormItem := (IDocForm.all.tags('FORM') as IHTMLElementCollection).item(q, 0);
    xResF := '';
    sTemp := FormItem.Name;
    contCampos := FormItem.Length;
     for j := 0 to contCampos - 1 do
      begin
        Field := FormItem.Item(j);
        xResF := xResF + Field.Name + '=' + Field.Value;
        if j < FormItem.Length - 1 then
          xResF := xResF + '&';
      end;
      matFormsArray[q, 0] := sTemp;
      matFormsArray[q, 1] := xResF;
   end;
end;

strFormMAT=

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
 <form name="fprin" id="fprin">
   <input type="hidden" name="field11" value="value11"></input>
   <input type="hidden" name="field12" value="value12"></input>
   <input type="hidden" name="field13" value="value13"></input>
 </form>
 <table>
  <tr>
   <td>Title</td>
   <td>Title</td>
   <td>Title</td>
   <td>Title</td>
  </tr>
  <tr>
   <td>Value</td>
   <td>Value</td>
   <td>Value</td>
   <form name="xxx1" id="xxx1">
   <td>Value</td>
   <td>Value</td>
   <input type="hidden" name="field11" value="value11"></input>
   <input type="hidden" name="field12" value="value12"></input>
   <input type="hidden" name="field13" value="value13"></input>
   <input type="hidden" name="field14" value="value14"></input>
   </form>
  </tr>
  <tr>
   <td>Value</td>
   <td>Value</td>
   <td>Value</td>
   <form name="xxx2" id="xxx2">
   <td>Value</td>
   <td>Value</td>
   <input type="hidden" name="field21" value="value21"></input>
   <input type="hidden" name="field22" value="value22"></input>
   <input type="hidden" name="field23" value="value23"></input>
   <input type="hidden" name="field24" value="value24"></input>
   </form>
  </tr>
  <tr>
   <td>Value</td>
   <td>Value</td>
   <td>Value</td>
   <form name="xxx3" id="xxx3">
   <td>Value</td>
   <td>Value</td>
   <input type="hidden" name="field31" value="value31"></input>
   <input type="hidden" name="field32" value="value32"></input>
   <input type="hidden" name="field33" value="value33"></input>
   <input type="hidden" name="field34" value="value34"></input>
   </form>
  </tr>
  <tr>
   <td>Value</td>
   <td>Value</td>
   <td>Value</td>
   <form name="xxx4" id="xxx4">
   <td>Value</td>
   <td>Value</td>
   <input type="hidden" name="field41" value="value41"></input>
   <input type="hidden" name="field42" value="value42"></input>
   <input type="hidden" name="field43" value="value43"></input>
   <input type="hidden" name="field44" value="value44"></input>
   </form>
  </tr>
  <tr>
   <td>Value</td>
   <td>Value</td>
   <td>Value</td>
   <form name="xxx5" id="xxx5">
   <td>Value</td>
   <td>Value</td>
   <input type="hidden" name="field51" value="value51"></input>
   <input type="hidden" name="field52" value="value52"></input>
   <input type="hidden" name="field53" value="value53"></input>
   <input type="hidden" name="field54" value="value54"></input>
   </form>
  </tr>
  <tr>
   <td>Value</td>
   <td>Value</td>
   <td>Value</td>
   <form name="xxx6" id="xxx6">
   <td>Value</td>
   <td>Value</td>
   <input type="hidden" name="field61" value="value61"></input>
   <input type="hidden" name="field62" value="value62"></input>
   <input type="hidden" name="field63" value="value63"></input>
   <input type="hidden" name="field64" value="value64"></input>
   </form>
  </tr>

 </table>
</body>
</html>

我在线程中使用Synchronize(GetForms);进行过程调用,即使这样也会崩溃和变慢

我的问题是没有得到html,它已经启动并运行了,问题是提取html的形式,这个过程很慢

你的问题还不完全清楚你想做什么,但看起来你应该研究一种不同于HTMLDocument的技术,加载这个自定义HTML代码来完成这项工作。

如果需要使用由字段和值组成的查询字符串来调用某个URL,则应该查看TIdHTTP或任何其他组件以直接(或间接)执行HTTP调用。

最新更新