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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2008, 01:59   #1
AnalogXP
Пользователь
 
Аватар для AnalogXP
 
Регистрация: 11.01.2008
Сообщений: 42
По умолчанию Internet Explorer и захват ссылки

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

Хотел бы узнать что происходит когда мы кликаем по ссылке в окне браузера, и перемещяем эту ссылку. Если переместить ее на рабочий стол, то создастся файл .url содержащий эту самую ссылку. Так вот мне нужно реализовать перемещение ссылок из Internet Explorer-a в мою программу, и получить их текст и ссылки.
Например если нажать кнопку мыши на эту ссылку, и удерживая, переместить ее в мою программу, то получить нужно эти данные:
Текст - ссылку
ссылка - http://www.programmersforum.ru
Как это можно реализовать? Если есть у кого какая нибудь информация, поделитесь пожалуйста!
Заранее благодарен.
AnalogXP вне форума Ответить с цитированием
Старый 08.04.2008, 09:27   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

ondragover
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 08.04.2008, 10:18   #3
AnalogXP
Пользователь
 
Аватар для AnalogXP
 
Регистрация: 11.01.2008
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
ondragover
Я не об этом.

Вот пример кода. Реализует то, о чем я говорил. Но работает только с Firefox, Mozilla, 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;
AnalogXP вне форума Ответить с цитированием
Старый 08.04.2008, 10:21   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Какое отношение этот код имеет к URL в адресной строке браузера ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 08.04.2008, 10:36   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Какое отношение этот код имеет к URL в адресной строке браузера ?
А причем тут адресная строка браузера? Автор в принципе со страниц ссылки таскать хочет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.04.2008, 11:07   #6
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Цитата:
Если переместить ее на рабочий стол, то создастся файл .url содержащий эту самую ссылку. Так вот мне нужно реализовать перемещение ссылок из Internet Explorer-a в мою программу, и получить их текст и ссылки.
не drag`ndrop ли имеется ввиду ?
перетащили ссылку,в dragover получили её, Idhttp.get-ом получили её текст
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 08.04.2008, 18:09   #7
AnalogXP
Пользователь
 
Аватар для AnalogXP
 
Регистрация: 11.01.2008
Сообщений: 42
По умолчанию

Если у кого нибудь установлен компонент VirtualTreeView, то могу дать пример (1.3 из аттача), где все это реализованно. Вот только c IE непорядок, почему с ним этот код не работает? В чем разница? Дело как мне кажется не в Drag and Drop, DragOver, а в разборе данных обьекта который передается.

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

Вот что удалось пока сделать:
Код:
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;
Вложения
Тип файла: zip virtualtreeview.zip (603.6 Кб, 39 просмотров)

Последний раз редактировалось Stilet; 11.04.2008 в 09:45.
AnalogXP вне форума Ответить с цитированием
Старый 10.04.2008, 21:36   #8
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

какой текст ? содержание страницы по ссылке ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 10.04.2008, 21:57   #9
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

нет, по моему имя ссылки (не URL, а имя) см. пост #1
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 11.04.2008, 09:24   #10
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

у ссылки нет имени
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Internet Explorer DeDoK Общие вопросы Delphi 1 14.06.2008 14:31
История Internet Explorer N!ckeL Общие вопросы Delphi 1 02.04.2008 18:36
Проблемы с Internet Explorer entrex Операционные системы общие вопросы 1 31.10.2007 17:33
Internet Explorer 7.0 Аlex Win Api 12 09.09.2007 09:45
Работа с Internet Explorer nuclearpartizan Общие вопросы Delphi 7 31.01.2007 23:25