Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить ссылку и текст, из Internet Explorera 
:(
    Опции темы
Pavelbej
Дата 8.4.2008, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 419
Регистрация: 5.7.2005

Репутация: нет
Всего: 6



Здравствуйте!

Возникла необходимость переместить ссылки из браузера IE в мою программу и получить эту самую ссылку и ее текст. То есть если мышкой схватить эту ссылку, и перемесить ее на мою программу, то в результате я должен получить:

Текст - ссылку
ссылка - http://forum.vingrad.ru

В статье Quadr0, о компоненте VirtualTreeView, есть пример работы с Drag and Drop этого самого компонента. Так в нем реализованно то что мне нужно, но работает его код только с Mozilla, Firefox, Netscape. А вот с IE не получается. Хотелось бы узнать почему так? В чем отличие? Понятно что нужные данные передаются по другому, но как?
Помогите понять!

Вот пример кода:
Код

procedure TfrmMain.AddUnicodeText(DataObject: IDataObject;
  Target: TVirtualStringTree; Mode: TVTNodeAttachMode);
var
  // Структура, которая будет запрашивать указатеь на глобальные данные
  FormatEtc: TFormatEtc;
  // Структура с данными
  Medium: TStgMedium;
  // Указатель на строку
  OLEData,
  // Для прохода цикла с целью разделения текста на строки
  Head, Tail: PWideChar;
  // Узел, получающий новую ветку
  TargetNode,
  // Новая ветка
  Node: PVirtualNode;
  // Её данные
  Data: PItemNode;
begin
  if Mode <> amNowhere then
  begin
      // Заполняем струкутру для получения ЮНИКОД-текста
      with FormatEtc do
      begin
          cfFormat := CF_UNICODETEXT;
          // Нет у нас никакого девайса...
          ptd := nil;
          // Нам нужно содержание (текст в данном случае)
          dwAspect := DVASPECT_CONTENT;
          // Нет страницы для мультистраничных данных
          lindex := -1;
          // Мы будем получать указатель на данные через глобальную память
          tymed := TYMED_HGLOBAL;
      end;
      // Есть ли ЮНИКОД-текст для нашего запроса?
      if DataObject.QueryGetData(FormatEtc) = S_OK then
      begin
          // Опа, есть, можем получить данные
          if DataObject.GetData(FormatEtc, Medium) = S_OK then
          begin
              // Вот они:
              OLEData := GlobalLock(Medium.hGlobal);
              if Assigned(OLEData) then
              begin
                  Target.BeginUpdate;
                  // Выбираем место для вставки, если переданное = nil
                  TargetNode := Target.DropTargetNode;
                  if TargetNode = nil then
                      TargetNode := Target.FocusedNode;
                  // Разбиваем текст на строки
                  Head := OLEData;
                  try
                  while Head^ <> #0 do
                  begin
                      Tail := Head;
                      while not (Tail^ in [WideChar(#0), WideChar(#13), WideChar(#10), WideChar(#9)]) do
                          Inc(Tail);
                      if Head <> Tail then
                      begin
                          // Добавляем новую ноду, если есть хотя бы один символ
                          // для строки.
                          Node := Target.InsertNode(TargetNode, Mode);
                          Data := Target.GetNodeData(Node);
                          Data^.Name := Head;
                          SetLength(Data^.Name, (Tail - Head));
                      end;
                      // Пропускаем табы
                      if Tail^ = #9 then
                          Inc(Tail);
                      // Символы переноса каретки и конца строки
                      if Tail^ = #13 then
                          Inc(Tail);
                      if Tail^ = #10 then
                          Inc(Tail);
                      // Шагаем дальше
                      Head := Tail;
                  end;
                  finally
                      GlobalUnlock(Medium.hGlobal);
                      Target.EndUpdate;
                  end;
              end;
              // Вот это лучше не забывать делать
              ReleaseStgMedium(Medium);
         end;
     end;
   end;
end;

PM MAIL   Вверх
Pavelbej
Дата 10.4.2008, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 419
Регистрация: 5.7.2005

Репутация: нет
Всего: 6



Пока решил проблему лишь частично, вернее только ссылки могу извлечь, а вот с текстом не получается. Может кто знает как проблему решить, помогите.

Вот что удалось пока сделать:
Код

var
  FMT: FORMATETC;
  MED: STGMEDIUM;
  Size: DWORD;
  Buffer: PChar;
  Text2: string;
begin
if DataObject <> nil then
begin
      FMT.cfFormat := CF_TEXT;
      FMT.ptd := nil;
      FMT.dwAspect := DVASPECT_CONTENT;
      FMT.lindex := -1;
      FMT.tymed := TYMED_HGLOBAL;
      DataObject.GetData(FMT, MED);
      Size := GlobalSize(MED.hGlobal);
      Buffer := GlobalLock(MED.hGlobal);
      SetString(Text2, Buffer, Size);
      GlobalUnlock(MED.hGlobal);
      ReleaseStgMedium(MED);
      memo1.Lines.Add(text2);
end;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0408 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.