Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

HTML и Буфер обмена [D7, XP]


SerJaNT ©   (2006-08-19 14:38:00) 

В буфере находится скопированная (через CTRL+C) в IE Web страничка. Как отобразить эту страничку (из буфера) в WebBrowser?


SerJaNT   (2006-08-23 01:43:00) [1]

up!


SerJaNT   (2006-08-22 13:01:00) [2]

> [6] Пусик ©   (19.08.06 18:02)


Спасибо за код, но он не работает т.е. появляется ошибка EConvertError. Уже что только с ним не делал, ничего не пойму. Переменная w просто пустая! А StrToInt пытается ее конвертировать в число,тут то и ошибка... Я посмотрел код скопированной странички, так там до startHTML еще какой-то текст есть.


Пусик   (2006-08-19 18:02:00) [3]

Например, так:

function TForm3.SetWBFromClibboard: Boolean;
var
Document: IHTMLDocument2;
V: OleVariant;
Data: THandle;
Len: Integer;
StartHtml,EndHtml: Integer;
w: WideString;
s,s1: String;
begin
Result := True;
try
 if WB.Document = nil then WB.Navigate('about:blank');

 while WB.Document = nil do Application.ProcessMessages;

 Clipboard.Open;
 Data := GetClipboardData(49337);
 try
  if Data <> 0
   then w := PWideChar(GlobalLock(Data))
   else w := '';
 finally
  if Data <> 0 then
    GlobalUnlock(Data);
    Clipboard.Close;
 end;
 s := Utf8ToAnsi(PChar(w));
 Len := Pos('<',s);
 s1 := Copy(s,1,Len);
 Len := Pos('StartHTML:',s1);
 Delete(s1,1,Len+9);
 Len := Pos(#13#10,s1);
 StartHtml := StrToInt(Copy(s1,1,Len-1));
 Delete(s1,1,Len+1);
 Len := Pos(':',s1);
 Delete(s1,1,Len);
 EndHtml := StrToInt(Copy(s1,1,Pos(#13#10,s1)-1) );

 s := Copy(s,StartHtml+1,EndHtml-StartHtml);
 try
  V := VarArrayCreate([0, 0], varVariant);
  Document:= WB.Document as IHtmlDocument2;
  V[0] := s;
  Document.Write(PSafeArray(TVarData(v).VArray));
 finally
  Document.Close;
 end;
except
 Result := False;
end;

end;


SerJaNT   (2006-08-19 15:18:00) [4]

> Значит в буфере у тебя текст без разметки.
> Естественно, так он и будет показан.


Нет, я в ослике веб страничку скопировал. В буфере значит уже не plain text будет т.к. например в ворд вставляется как web-страничка. Это все из-за clipboard.AsText - возвращает html как обычный текст. Ладно, тогда как получить содержимое буфера в виде html? И нужно без всякой доп.инфы  в начале html-кода типа:

StartHTML:000000213
EndHTML:000001726
StartFragment:000000703
EndFragment:000001647
StartSelection:000000703
EndSelection:000001647
SourceURL:res://C:\WINDOWS\System32\shdoclc.dll/navcancl.htm


Пусик   (2006-08-19 15:13:00) [5]


> Вернее грузится, только как plain text


Значит в буфере у тебя текст без разметки.
Естественно, так он и будет показан.


TUser   (2006-08-19 15:11:00) [6]


> Но ничего не грузится. Вернее грузится, только как plain
> text. А мвсе из-за clipboard.AsText! Как вставить в WebBrowser
> html?

Ты же правильно сказал - в буфере нет html'а. Нечего вставлять.


SerJaNT   (2006-08-19 15:10:00) [7]

Делаю так:
procedure TMainForm.PasteHTMLClick(Sender: TObject);
var
 URL: OLEVariant;
begin
URL := 'about:'+clipboard.AsText;
WebBrowser1.Navigate2(URL);
end;


Но ничего не грузится. Вернее грузится, только как plain text. А мвсе из-за clipboard.AsText! Как вставить в WebBrowser html?


Пусик   (2006-08-19 14:58:00) [8]

Если страница не очень большая, можно получить буфер в строку,
потом

var
URL: OLEVariant;
begin
URL := 'about:'+MyStrFromBuf;
WebBrowser1.Navigate2(URL);


Наверх

Титульная страница Поиск, карта сайта Написать письмо