Открыть браузер с адресом сайта

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
moskatov
новенький
Сообщения: 10
Зарегистрирован: 30.10.2006 15:04:51
Откуда: Россия
Контактная информация:

Открыть браузер с адресом сайта

Сообщение moskatov »

Здравствуйте.
Хочу перейти с Borland C++ на Lazarus. Есть вопрос.
Хочу при щелчке на компоненте label или button открыть браузер с адресом сайта. На Borland C++ это выглядит так:

ShellExecute(Handle,"open","http://www.lazarus.freepascal.org",NULL,NULL,SW_RESTORE);

На Borland Delphi тоже знаю как сделать. А вот на Лазаре – не знаю. SW_RESTORE в Lazarus, кажется, нет. Подскажите, пожалуйста, новичку.
SergKam
постоялец
Сообщения: 251
Зарегистрирован: 16.11.2005 20:31:11
Откуда: Украина,Харьков

Сообщение SergKam »

ShellExecute это функция winapi тоесть от компилятора вроде никак не зависит. просто както до ругому называется смотри модуль windows
в новом лазарусе для этого специальный компонент есть THTMLBrowserHelpViewer на вкладке System
SergKam
постоялец
Сообщения: 251
Зарегистрирован: 16.11.2005 20:31:11
Откуда: Украина,Харьков

Сообщение SergKam »

Аватара пользователя
moskatov
новенький
Сообщения: 10
Зарегистрирован: 30.10.2006 15:04:51
Откуда: Россия
Контактная информация:

Сообщение moskatov »

Не совсем понял какой должен быть листинг. Кинул на форму компонент HTMLHelpDatabase. Написал
TProcess.HTMLHelpDatabase1('open','http://www.lazarus.freepascal.org') .
Сам вижу – написал глупость. А как правильно? Подскажите, пожалуйста, листинг.
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Сообщение tria »

В Params - имя html-файла

{$IFdef MSWindows}
{Case Win32Platform of
VER_PLATFORM_WIN32s: _HlpPrefixForBrowsers:=''; //System is Win32s.
VER_PLATFORM_WIN32_WINDOWS: _HlpPrefixForBrowsers:=''; //System is Windows 95.
VER_PLATFORM_WIN32_NT: _HlpPrefixForBrowsers:='file://'; //System is Windows NT.
end;//Case}

Case Win32Platform of
0: HlpPrefix:='';//System is Win32s.
1: HlpPrefix:='';//System is Windows 95.
2: HlpPrefix:='file://';//System is Windows NT.
end;//Case}
Params:=HlpPrefix+Params;
CommandLine:='explorer '+Params;
{$ENDIF MSWindows}
{$IFdef Linux}
Params:='file://'+Params;
CommandLine:='htmlview '+Params;
{$ENDIF Linux}

HProc:=TProcess.Create(nil);
HProc.CommandLine:=CommandLine;
HProc.Execute;
HProc.Free;
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Сообщение tria »

Буду благодарен, если проверишь правильность работы под вин95 и вин98.
Если не будет работать - напиши.
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Сообщение tria »

Да.
Вся игра с префиксами - это для файла.
Если адрес в ВЕБ - это все лишнее.
Аватара пользователя
moskatov
новенький
Сообщения: 10
Зарегистрирован: 30.10.2006 15:04:51
Откуда: Россия
Контактная информация:

Сообщение moskatov »

Здравствуйте.
Пишу под Win XP. Лазарь даёт ошибку (и в 98 и в XP SP2). Сообщает, что не знает идентификаторы HlpPrefix, Params, CommandLine, HProc. На верное что-то надо в uses добавить.

Для адреса в Web на Delphi было бы достаточно написать одну строчку:

ShellExecute(0, nil,'http://www.lazarus.freepascal.org',nil,nil,1);

А в Lazarus, как вижу, строк значительно больше.
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Сообщение tria »

moskatov писал(а):Здравствуйте.
Пишу под Win XP. Лазарь даёт ошибку (и в 98 и в XP SP2). Сообщает, что не знает идентификаторы HlpPrefix, Params, CommandLine, HProc. На верное что-то надо в uses добавить.

Для адреса в Web на Delphi было бы достаточно написать одну строчку:

ShellExecute(0, nil,'http://www.lazarus.freepascal.org',nil,nil,1);

А в Lazarus, как вижу, строк значительно больше.


Во-первых, я тебе бросил пример, работающий для обоих операционок для открытия файла в броузере. Сделано через TProcess так как в Линуксе ShellExecute работать не захотел.

Конкретно в твоей ситуации по-идее достаточно:
ShellExecute(0,PChar('open'),PChar('explorer'),PChar('http://www.lazarus.freepascal.org'),nil,5);

Открой хелп по делфи, почитай, какие параметры там должны быть. Нет делфи - посмотри исходники Лазаря (нажми контрол и кликни мышкой на ShellExecute). Разбирайся, учись.

ShellExecute(0,PChar('open'),PChar('explorer'),PChar(Params),nil,5);
SergKam
постоялец
Сообщения: 251
Зарегистрирован: 16.11.2005 20:31:11
Откуда: Украина,Харьков

Сообщение SergKam »

Учи язык сначала.
Все что там не определено у тебя, это переменные
должны быть обьявлены в секции VAR

Код: Выделить всё

var 
HlpPrefix, Params, CommandLine:string;
HProc:TProcess;


TProcess обьявлен в какомто юните который надо в uses добавить
смотри TProcces и F1
Аватара пользователя
moskatov
новенький
Сообщения: 10
Зарегистрирован: 30.10.2006 15:04:51
Откуда: Россия
Контактная информация:

Сообщение moskatov »

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

SergKam писал(а):Учи язык сначала.


Учу потихоньку. Спасибо за совет.

ShellExecute и в Windows XP работать не хочет. Вписал:

ShellExecute(0,PChar('open'),PChar('explorer'),PChar('http://www.lazarus.freepascal.org'),nil,5);

Не компилирует, ошибка. Нажал Ctrl и кликнул на ShellExecute. Результатом было сообщение:

unit1.pas(40,1) Error: не найден идентификатор: ShellExecute

Пытался заменить ShellExecute на TProcess. Положил на форму компонент TProcess с вкладки System.

TProcess(0,PChar('open'),PChar('explorer'),PChar('http://www.lazarus.freepascal.org'),nil,5);

Результат: останавливается после цифры "0" и собщает "Unit1.pas(47,11) Fatal: Syntax error, ")" expected but "," found".

Написал, как указал tria, под Windows - всё работает и под XP и под 98:

{$IFdef MSWindows}
{Case Win32Platform of
VER_PLATFORM_WIN32s: _HlpPrefixForBrowsers:='http://'; //System is Win32s.
VER_PLATFORM_WIN32_WINDOWS: _HlpPrefixForBrowsers:='http://'; //System is Windows 95.
VER_PLATFORM_WIN32_NT: _HlpPrefixForBrowsers:='http://'; //System is Windows NT.
end;//Case}

Case Win32Platform of
0: HlpPrefix:='http://';//System is Win32s.
1: HlpPrefix:='http://';//System is Windows 95.
2: HlpPrefix:='http://';//System is Windows NT.
end;//Case}
Params:=HlpPrefix+'www.lazarus.freepascal.org';
CommandLine:='explorer '+Params;
{$ENDIF MSWindows}
HProc:=TProcess.Create(nil);
HProc.CommandLine:=CommandLine;
HProc.Execute;
HProc.Free;

Большое спасибо. Win 95 у меня нет.
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Сообщение tria »

Один из возможных алгоритмов поиска нужного юнита.
Задача: найти, в каком юните определена нужная нам функция (ShellExecute)
Решение:
1.Делаем поиск в файлах (из меню лазаря) в директории самого Лазаря. Текст для поиска - имя функции.
2.Находим места, где функция встречается.
3.Среди них выбираем то, где функция определена.
4. Этот юнит подключаем к нашей проге.

В твоем конкретном случае этот юнит - ShellApi. Добавь его в Юзез и будет тебе счастье.

п.с.
Только без обид. Твои вопросы "не выстраданные". Не похоже, чтобы ты бился над решением этих вопросов по нескольку часов.
На форуме люди дают направление для поиска, что назвается "куда копать" - и уже им за это спасибо, а не выкладывают готовое решение на блюдечке.
Аватара пользователя
moskatov
новенький
Сообщения: 10
Зарегистрирован: 30.10.2006 15:04:51
Откуда: Россия
Контактная информация:

Сообщение moskatov »

Здравствуйте!
С ShellApi всё работает. Спасибо.
Перед тем как задавать вопросы я скачал все темы форумов freepascal.ru. Скачал и всё прочитал. Что понял – это другой вопрос. Через Яндекс искал все доступные исходные тексты программ, написанных на Lazarus (например, ColorSnatch 1.0.5). Изучал их код. Пытался писать тестовую программку, чтобы разобраться как делать. На это ушло около недели. И только потом задал вопросы.
Знаю, вопросы глупые. Извиняюсь за беспокойство.
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Сообщение tria »

moskatov писал(а):Здравствуйте!
С ShellApi всё работает. Спасибо.
Перед тем как задавать вопросы я скачал все темы форумов freepascal.ru. Скачал и всё прочитал. Что понял – это другой вопрос. Через Яндекс искал все доступные исходные тексты программ, написанных на Lazarus (например, ColorSnatch 1.0.5). Изучал их код. Пытался писать тестовую программку, чтобы разобраться как делать. На это ушло около недели. И только потом задал вопросы.
Знаю, вопросы глупые. Извиняюсь за беспокойство.


Понятно.
Я бы посоветовал купить книги по Паскалю или Делфи и начать с их изучения.
Что Делфи, что Лазарус для тебя будет еще долго одинаково. Поэтому наверное лучше скачать Турбо Делфи и поработать в нем. Для новичка в ней работать легче. Хелп лучше, отладчик гораздо удобнее.
Ответить