Некорректная Работа Shellexecute

Тема в разделе "Delphi - Система", создана пользователем FLYer, 16 ноя 2011.

  1. FLYer

    FLYer Гость

    У меня есть текстовая ссылка на определенный сайт. При нажатии на кнопку надо перейти на определенный сайт, который будет в компоненте.
    В инете везде написан такой синтаксис функции ShellExecute:

    Код (Delphi):
    ShellExecute(Application.Handle, PChar('open'), PChar(DBEdit2.Text), Nil, Nil, SW_SHOW);
    Код (Delphi):
    ShellExecute(Form1.Handle, 'open', PChar(DBEdit2.Text), nil, nil, SW_SHOWNORMAL);
    Код (Delphi):
    ShellExecute(Application.Handle, PChar('open'), PChar(DBEdit2.Text), nil, nil, SW_SHOW);
    Код (Delphi):
    ShellExecute(Application.Handle, nil, PChar(DBEdit2.Text), nil, nil, SW_HIDE);
    Срабатывает эта штука только когда я первый раз запустила прогу. При дальнейшем нажатии на кнопку рядом с сылкой ничего не происходит или открывается папка, в которой находится картинка на кнопке. В чем может быть проблема?

    З.Ы. У меня в компоненте DBEdit высвечивается определенная ссылка
     
  2. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Вызывая ShellExecute (по крайней мере с указанными Вами параметрами) Вы "поручаете" системе "догадаться" о действии которое Вы хотели бы выполнить...
    К сожалению не всегда она (операционная система) это в состоянии сделать... :)

    Вы попробуйте конкретнее "сформулировать" Ваше желание...
    Например (в вашем случае) нужно чтобы:
    1. Запустилось новое окно Интернет Эксплорера.
    2. В открывшемся окне, произошел переход по ссылке (из DBEdit2.Text).
    Лучше это делать непосредственно через CreateProcess. (ShellExecute сама использует CreateProcess)
    Код (Delphi):
    uses Windows;
    ...
    var
    StartUpInfo: TStartUpInfo;
    ProcessInfo: TProcessInformation;
    begin

    FillChar(StartUpInfo, SizeOf(TStartUpInfo), 0);

    StartUpInfo.cb := SizeOf(TStartUpInfo);
    StartUpInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
    StartUpInfo.wShowWindow := SW_SHOWNORMAL;

    CreateProcess('C:\Program Files\Internet Explorer\IEXPLORE.EXE', PChar(DBEdit2.Text), nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);

    end;
    Вот так приблизительно...
    Учните только что ссылка должна быть полная. т.е. включать протокол соединения (в данном случае http).
    например: http://codeby.net/
     
  3. FLYer

    FLYer Гость

    Большое спасибо! Код помог :) теперь при каждом клике хотя бы открывается браузер, но почему-то упрямо не видит текстовую ссылку в DBEdit, хотя она у меня скопирована из адресной строки как положено
     
  4. AndreyS

    AndreyS Active Member

    Регистрация:
    15 окт 2007
    Сообщения:
    39
    Симпатии:
    0
    Можна использовать WebBrowser


    form1.WebBrowser1.Navigate(form1.DBEdit2.Text);

    так проще
     
  5. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Поясните пожалуйста, что Вы имеете в виду под выражением "не видит текстовую ссылку":
    1. браузер открывается но в адресной строке пусто.
    2. браузер открывается, адресной строке есть строчка URL, но перехода не происходит.
    3. браузер открывается, адресной строке есть строчка URL, но браузер сообщает что сервер не найден...
    4. чтото еще?
    Можете дать пример "текстовой ссылки" из DBEdit (которую "не видит" браузер) и код, которым вызываете?
    Тогда я смогу проверить у себя и указать причину этой Вашей "невидимости".
     
  6. FLYer

    FLYer Гость

    Отвечаю: браузер открывает домашнюю страницу, хотя в DBEdit написано http://www.facebook.com/
    DBEdit берет информацию из поля БД, которое имеет тип Текстовый

    код такой же, как Вы показали, вот строка которую я изменила под свой проект:

    Код (Delphi):
    CreateProcess('C:\Program Files\Mozilla Firefox\firefox.exe', PChar(DBEdit2.Text), nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
     
  7. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Для Firefox, открытие страницы правильно вызывать так:
    Код (Delphi):
    var
    FirefoxURLOptions: string;
    //...
    begin
    FirefoxURLOptions := '-requestPending -osint -url "'+DBEdit2.Text+'"';
    CreateProcess('C:\Program Files\Mozilla Firefox\firefox.exe', PChar(FirefoxURLOptions), nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
    end;
     
  8. FLYer

    FLYer Гость

    Большое спасибо! Все работает :rolleyes:
     
Загрузка...
Похожие Темы - Некорректная Работа Shellexecute
  1. Shouldercannon
    Ответов:
    2
    Просмотров:
    2.155
  2. Kuklus
    Ответов:
    0
    Просмотров:
    24
  3. Andrey Kha
    Ответов:
    0
    Просмотров:
    37
  4. Hoasker
    Ответов:
    0
    Просмотров:
    65
  5. garri671
    Ответов:
    0
    Просмотров:
    76

Поделиться этой страницей