Oleobject, textarea

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by SultanOFF, 15 Nov 2009.

  1. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    Здравствуйте, хочу сделать чтобы по нажатию кнопки заполнялось содержимое textarea. делаю так:
    Code:
    procedure TForm1.btn2Click(Sender: TObject);
    var
      ovElements: OleVariant;
      i: Integer;
    begin
    ovElements := Wb1.OleObject.Document.forms.item(0).elements;
    for i := 0 to (ovElements.Length - 1) do
    if (ovElements.item(i).tagName = 'textarea') then
    ovElements.item(i).value:='Marsel';
    end;
    но к сожалению ничего не заполняется :( В чем Моя ошибка? Помогите пожалуйста!
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Вообще дело вот в чем:
    Элементы могут храниться не в том виде в котором написаны.
    В моём случае <textarea> имел имя TEXTAREA
    По этому проверка ovElements.item(i).tagName = 'textarea' заваливалась из-за регистра символов. Как вариант преобразовывав ovElements.item(i).tagName в нижний регистр и уже сверяй.
    А догадаться до этого можно было бы очень просто. Даже не знаю об этом.
    Достаточно было бы в цикл поместить команду memo1.Lines.Add(ovElements.item(i).tagName);
    и сразу бы всё стало видно.
     
  3. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    Слушай Я сделал вот так, в принципе работает :)
    Code:
    procedure TForm1.btn2Click(Sender: TObject);
    var
      doc : IHTMLDocument2;
      col : IHTMLElementCollection;
      el : IHTMLElement;
      i : integer;
    begin
    doc := wb1.Document as IHTMLDocument2;
     col := doc.all.tags('textarea') as IHTMLElementCollection;
      for i := 0 to col.length-1 do
      begin
        el := col.item(i, 0) as IHTMLElement;
        el.setAttribute('value', 'Marsel', 0);
      end;
    end;
    но почему то к типу file не подходит, делаю вот так:

    Code:
    procedure TForm1.btn2Click(Sender: TObject);
    var
      doc : IHTMLDocument2;
      col : IHTMLElementCollection;
      el : IHTMLElement;
      i : integer;
    begin
    doc := wb1.Document as IHTMLDocument2;
    col := doc.all.tags('input') as IHTMLElementCollection;
    for i := 0 to col.length-1 do
      begin
        el := col.item(i, 0) as IHTMLElement;
        if el.getAttribute('type', 0) = 'file' then
          el.setAttribute('value', 'Marsel', 0);
      end;
    end;
    но совсем не работает? Думаете почему?
     
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    а никак. Оно имеет атрибут READ_ONLY потому как это сделано с целью безопасности. Даже черех javascript неполучится. Если можно было бы задавать самому эти данные то можно былобы у пользователя автоматом сливать файлы с компа без его ведома.
     
    #4 slesh, 17 Nov 2009
    Last edited: 17 Nov 2009
  5. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    156
    Likes Received:
    6
    Reputations:
    0
    блин точно...а незнаете как в Моем случае тогда поступить?
     
  6. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    как поступить - хз потому что ты не описал что тебе нужно )
    Если отправить файл на сервак, то ищи по форуму. исходникик были точно (сам выкладывал)