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

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

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

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

Сообщение moskatov » 30.10.2006 16:10:59

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

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

На Borland Delphi тоже знаю как сделать. А вот на Лазаре – не знаю. SW_RESTORE в Lazarus, кажется, нет. Подскажите, пожалуйста, новичку.
Аватара пользователя
moskatov
новенький
 
Сообщения: 10
Зарегистрирован: 30.10.2006 16:04:51
Откуда: Россия

Сообщение SergKam » 30.10.2006 18:59:43

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

Сообщение SergKam » 30.10.2006 19:45:18

SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Сообщение moskatov » 31.10.2006 02:20:46

Не совсем понял какой должен быть листинг. Кинул на форму компонент HTMLHelpDatabase. Написал
TProcess.HTMLHelpDatabase1('open','http://www.lazarus.freepascal.org') .
Сам вижу – написал глупость. А как правильно? Подскажите, пожалуйста, листинг.
Аватара пользователя
moskatov
новенький
 
Сообщения: 10
Зарегистрирован: 30.10.2006 16:04:51
Откуда: Россия

Сообщение tria » 31.10.2006 11:28:15

В 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 » 31.10.2006 11:31:31

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

Сообщение tria » 31.10.2006 11:33:37

Да.
Вся игра с префиксами - это для файла.
Если адрес в ВЕБ - это все лишнее.
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Сообщение moskatov » 31.10.2006 17:52:30

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

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

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

А в Lazarus, как вижу, строк значительно больше.
Аватара пользователя
moskatov
новенький
 
Сообщения: 10
Зарегистрирован: 30.10.2006 16:04:51
Откуда: Россия

Сообщение tria » 31.10.2006 18:38:23

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);
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Сообщение SergKam » 31.10.2006 19:39:21

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

Код: Выделить всё
var
HlpPrefix, Params, CommandLine:string;
HProc:TProcess;


TProcess обьявлен в какомто юните который надо в uses добавить
смотри TProcces и F1
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Сообщение moskatov » 31.10.2006 20:35:11

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

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 у меня нет.
Аватара пользователя
moskatov
новенький
 
Сообщения: 10
Зарегистрирован: 30.10.2006 16:04:51
Откуда: Россия

Сообщение tria » 31.10.2006 21:26:19

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

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

п.с.
Только без обид. Твои вопросы "не выстраданные". Не похоже, чтобы ты бился над решением этих вопросов по нескольку часов.
На форуме люди дают направление для поиска, что назвается "куда копать" - и уже им за это спасибо, а не выкладывают готовое решение на блюдечке.
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Сообщение moskatov » 01.11.2006 17:51:24

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

Сообщение tria » 01.11.2006 19:40:42

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


Понятно.
Я бы посоветовал купить книги по Паскалю или Делфи и начать с их изучения.
Что Делфи, что Лазарус для тебя будет еще долго одинаково. Поэтому наверное лучше скачать Турбо Делфи и поработать в нем. Для новичка в ней работать легче. Хелп лучше, отладчик гораздо удобнее.
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 67

Рейтинг@Mail.ru