Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2007, 00:42   #1
GAGARIN-NEW
Познаю мир
Форумчанин Подтвердите свой е-майл
 
Аватар для GAGARIN-NEW
 
Регистрация: 05.10.2007
Сообщений: 387
Вопрос Заполнения Webbrowser

Вот исходник ...
накидал по быстрому ...
Скажите почему не работает кнопка "добавление к существующему тексту в браузере нового" в проекте ... я вроде всё правильно сделал ...

Жду помощи...
Вложения
Тип файла: rar Браузер.rar (188.2 Кб, 36 просмотров)
---
GAGARIN-NEW вне форума Ответить с цитированием
Старый 12.12.2007, 13:48   #2
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
Хорошо

Я код не смотрел, только exe'шник, сразу скажу:
Делай так:
Чтоб добавить текст, нужно получить текст из браузера в какую нибудь переменную, потом устанавливать текст в браузер как
Переменная+Memo1.Text и всё.

А текст ты добавить не можешь потому что ты не сохраняешь текст из Memo в файл и не открываешь его Браузером, а динамически впихиваешь в браузер, может из-за этого
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума Ответить с цитированием
Старый 12.12.2007, 15:33   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Что за трудности. Не стоит мудрить через переменные, я тоже раньше так делал. Но к сути: с помощью документа в броузере можно обращаться непосредственно к содержанию тегов к примеру <p>...</p> и прямо туда уже добавлять текст и конечно же без сохранения в файл и динамической перезагрузки страницы. Почитайте в MSDN ( вроде ) есть про Document

поискал немного в старинке своей вот нашел..

это всеголиш вставки в броузер... но в ходе описаны некоторые идеи и главное удобства... так что вчитайтесь и просмотрите данный кусок кода:

Код:
function GetTextFromWebBrowser(WB: TWebBrowser): String;
var
  Document: IHTMLDocument2;
begin
  Result := '';
  Document := WB.Document as IHtmlDocument2;
  if Document <>  nil then
    Result := (Document.all.Item(NULL, 0) as IHTMLElement).OuterTEXT;
end;

procedure TextToWebBrowser(Text: string; var WB: TWebBrowser);
var
  Document: IHTMLDocument2;
  V: OleVariant;
begin
  // Документ необходимо создать только один раз за текущую сессию работы
  if WB.Document = nil then
    WB.Navigate('about:blank');
  // Ожидаем создания документа и позволяем обрабатывать все сообщения
  while WB.Document = nil do
    Application.ProcessMessages;
  Document := WB.Document as IHtmlDocument2;
  // Вставляем текст (до 2Гб)
  {следующие строчки внесены недавно - старый вариант функции не работал под XP}
  V := VarArrayCreate([0, 0], varVariant);
  V[0] := Text;
  Document.Write(PSafeArray(TVarData(v).VArray));
  Document.Close;
end;

procedure AddLine;
var
  b: TBitmap;
  s: string;
  i, j: Integer;
begin
  if ImageIndex >= 0 then
  begin
    s := format('%sCashe\%d.bmp',[startdir, ImageIndex]);
    createdir(extractfilepath(s));
    if not fileexists(s) then begin
    b := tbitmap.Create;
    Images.GetBitmap(ImageIndex, b);
    b.SaveToFile(s);
    b.Free;
    end;
    s := format('<img src="%s">',[s]);
  end else s := '';

    for i:= 0 to sp.Count-1 do
    with TSmile(sp.Items[i]) do
    begin
      for j:= 0 to 31 do
      if length(Code[j])>0 then
      begin
        text := StringReplace(
          text,
          CODE[j],
          format('<img src="%s">', [Image]),
          [rfIgnoreCase]
        );
      end;
    end;
    
    text := StringReplace(text, '<color=', '<font color=', [rfIgnoreCase]);
    text := StringReplace(text, '</color>', '</font>', [rfIgnoreCase]);
  
  case Flag of
  // простой текст
  0:begin
    s := format(
    '%s%s<br>'
    ,[s,text]
    );
    if Histor <> nil then Histor.Add(text);
  end;
  // отправленый текст
  1:begin
    s := format(
    '%s<b><font color="blue">%s<br></font></b>'
    ,[s,text]
    );
    if Histor <> nil then Histor.Add(format('-->--%s',[text]));
  end;
  // принятый текст
  2:begin
    s := format(
    '%s<b><font color="red">%s<br></font></b>'
    ,[s,text]
    );
    if Histor <> nil then Histor.Add(format('--<--%s',[text]));
  end;
  // инфа всякая
  3:begin
    s := format(
    '%s<b><font color="green">%s</font></b><br>'
    ,[s,text]
    );
    if Histor <> nil then Histor.Add(text);
  end;
  end;

  WB.OleObject.Document.all.tags('P').item(0).insertAdjacentHTML('beforeEnd',s);
  WB.OleObject.Document.ParentWindow.ScrollTo(0, maxint);
end;

Последний раз редактировалось BOBAH13; 12.12.2007 в 15:41.
BOBAH13 вне форума Ответить с цитированием
Старый 12.12.2007, 15:53   #4
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
Радость

Мне кажется кто захочет понять этот текст для того это будет большая трудность чем первый способ.
Ну а если просто вставить текст в модуль и использовать... В принципе тоже самой и будет.

А на счёт переменных: что там сложного? Только переменную TStrings завести и создать её, потом уничтожить. Всё!
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума Ответить с цитированием
Старый 12.12.2007, 18:20   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

А мне кажется, у кого голова на плечах работает поймет и Вы представте себе чат сетевой. Кол-во людей ~100 и каждый пишет в окно броузера! Подумайте, как сложно и проблематично будет с копированием буфера всего текста броузера добавление в него новых данных и опять вставки в броузер. Поверьте я работал с данным вопросом и этот способ который я привел выше лучше.
BOBAH13 вне форума Ответить с цитированием
Старый 12.12.2007, 23:38   #6
GAGARIN-NEW
Познаю мир
Форумчанин Подтвердите свой е-майл
 
Аватар для GAGARIN-NEW
 
Регистрация: 05.10.2007
Сообщений: 387
Счастье

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
А мне кажется, у кого голова на плечах работает поймет и Вы представте себе чат сетевой. Кол-во людей ~100 и каждый пишет в окно броузера! Подумайте, как сложно и проблематично будет с копированием буфера всего текста броузера добавление в него новых данных и опять вставки в броузер. Поверьте я работал с данным вопросом и этот способ который я привел выше лучше.

Вообщето я буду ограничивать количество "строк" в браузере и старые сообщения наверно будут удалятся... а проблему я вроде решил тем способом каким тут написал только вместо переменной я поставил невидимаю мемо - она - же для ведения лога и сохранения разговора ...
---
GAGARIN-NEW вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построчный алгоритм заполнения многоугольника с затравкой (Билдер С++) SKA_zo4nik Помощь студентам 8 28.03.2011 20:15
Процедура заполнения массива. Delphi Alex_2017 Помощь студентам 1 02.06.2008 17:55
Какой самый быстрый метод заполнения массива, например двухмерного? SkAndrew Общие вопросы Delphi 11 29.05.2008 13:23
Программа для автоматического заполнения полей Маркъ Общие вопросы Delphi 2 23.06.2007 12:38