Einfach nur eine URL öffnen

Alle Fragen zur Netzwerkkommunikation
Antworten
hendy
Beiträge: 80
Registriert: Sa 11. Apr 2009, 17:01
OS, Lazarus, FPC: Windoof (L 0.9.26 FPC 2.2.2)
CPU-Target: 32Bit

Einfach nur eine URL öffnen

Beitrag von hendy »

Ich habe jetzt das internet durchsucht, aber nichts hat funktioniert. :cry:
Wenn möglich Plattform unabhängig.
Irgendwelche Vorschläge?
Dankt monta !!

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Einfach nur eine URL öffnen

Beitrag von theo »

hendy hat geschrieben:Ich habe jetzt das internet durchsucht, aber nichts hat funktioniert. :cry:
Wenn möglich Plattform unabhängig.
Irgendwelche Vorschläge?


Was meinst du damit? Lokal oder Internet?

Sry. hatte die Foren Kategorie nicht gelesen.
Vllt. das: http://curl.haxx.se/libcurl/pascal/

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Einfach nur eine URL öffnen

Beitrag von Targion »

hendy hat geschrieben:Ich habe jetzt das internet durchsucht, aber nichts hat funktioniert. :cry:
Wenn möglich Plattform unabhängig.
Irgendwelche Vorschläge?

Unter Linux geht folgendes:

Code: Alles auswählen

procedure OpenURL(url: String);
var p: TProcess;
begin
p:=TProcess.Create;
p.CommandLine:='xdg-open "'+url+'"';
p.Execute;
p.Free;
end;

Unter Windows gibt es ShellExecute, für MacOS fällt mir nichts ein.
Für eine "plattformunabhängige" Lösung kannst du ja mit Compilerswitches arbeiten.

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Re: Einfach nur eine URL öffnen

Beitrag von EugenE »

Nabend ^^

ich weiß nicht mehr von wo ich diese Unit her habe aber aufjedenfall nutze ich diese hier :)

Code: Alles auswählen

unit OpenURLUtil;
 
interface
 
{$mode objfpc}{$h+}
 
// Using Win32Proc binds the unit to LCL
// to break the binding, check for Unicode Windows must be done manually
 
// CarbonProc CreateCFString should also be replaced with MacOSAll code
 
{$ifdef Windows}
uses ShellAPI, Win32Proc;
{$endif}
{$ifdef LINUX}
uses SysUtils;
{$endif}
{$ifdef Darwin} // LCLCarbon?
uses MacOSAll, CarbonProc;
{$endif}
 
function OpenURLWide(const URLWide: WideString): Boolean;
function OpenURLAnsi(const URLAnsi: AnsiString): Boolean;
function OpenURL(const URLUtf8: String): Boolean;
 
implementation
 
function OpenURLWide(const URLWide: WideString): Boolean;
begin
  Result := OpenURL(UTF8Encode(URLWide));
end;
 
function OpenURLAnsi(const URLAnsi: AnsiString): Boolean;
begin
  Result := OpenURL(AnsiToUtf8(URLAnsi));
end;
 
{$IFDEF WINDOWS}
function OpenURL(const URLUtf8: String): Boolean;
var
  ws    : WideString;
  ans   : AnsiString;
begin
  Result := false;
  if URLUtf8 = '' then Exit;
 
  if UnicodeEnabledOS then begin
    ws := UTF8Decode(URLUtf8);
    Result := ShellExecuteW(0, 'open', PWideChar(ws), nil, nil, 0) > 32;
  end else begin
    ans := Utf8ToAnsi(URLUtf8); // utf8 must be converted to Windows Ansi-codepage
    Result := ShellExecute(0, 'open', PAnsiChar(ans), nil, nil, 0) > 32;
  end;
end;
{$ENDIF}
 
{$IFDEF LINUX}
function OpenURL(const URLUtf8: string): Boolean;
var
  Helper: string;
begin
  Result := True;
  try
    Helper := '';
    if fpsystem('which xdg-open') = 0 then
      Helper := 'xdg-open'
    else if FileExists('/etc/alternatives/x-www-browser') then
      Helper := '/etc/alternatives/x-www-browser'
    else if fpsystem('which firefox') = 0 then
      Helper := 'firefox'
    else if fpsystem('which konqueror') = 0 then
      Helper := 'konqueror'
    else if fpsystem('which opera') = 0 then
      Helper := 'opera'
    else if fpsystem('which mozilla') = 0 then
       Helper := 'mozilla';
 
    if Helper <> '' then
      fpSystem(Helper + ' ' + URLUtf8 + '&');
    else
      Result := False;
  except
  end;
end;
{$ENDIF}
 
{$IFDEF DARWIN}
function OpenURL(const URLUtf8: string): Boolean;
var
  cf  : CFStringRef;
  url : CFURLRef;
begin
  if URLUtf8 = '' then begin
    Result := false;
    Exit;
  end;
  CreateCFString(URLUtf8, cf);
  url := CFURLCreateWithString(nil, cf, nil);
  Result := LSOpenCFURLRef(url, nil) = 0;
  CFRelease(url);
  CFRelease(cf);
end;
{$ENDIF}
 
end.


MfG,
Eugen

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Re: Einfach nur eine URL öffnen

Beitrag von creed steiger »

geht ab 0.9.29 mit Bordmitteln
openurl
http://lazarus-ccr.sourceforge.net/docs ... enurl.html
Zuletzt geändert von creed steiger am So 10. Jan 2010, 02:12, insgesamt 1-mal geändert.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Einfach nur eine URL öffnen

Beitrag von m.fuchs »

Mit der Unit LazHelpHTML kann man den Browser auf dem laufenden System finden.

Kleines Beispiel:

Code: Alles auswählen

procedure OpenUrl(Url: String);
var
  HelpViewer: THTMLBrowserHelpViewer;
  BrowserPath, BrowserParams: string;
  BrowserProcess: TProcessUTF8;
begin
  BrowserPath := EmptyStr;
  BrowserParams := EmptyStr;
  try
    HelpViewer := THTMLBrowserHelpViewer.Create(nil);
    HelpViewer.FindDefaultBrowser(BrowserPath,BrowserParams);
    BrowserParams := SysUtils.StringReplace(BrowserParams, '%s', Url, [rfReplaceAll, rfIgnoreCase]);
    try
      BrowserProcess := TProcessUTF8.Create(nil);
      BrowserProcess.CommandLine := BrowserPath + ' ' + BrowserParams;
      BrowserProcess.Execute;
    finally
      FreeAndNil(BrowserProcess);
    end;
  finally
    FreeAndNil(HelpViewer);
  end;
end;


hth
Micha
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Re: Einfach nur eine URL öffnen

Beitrag von creed steiger »

mikescu hat geschrieben:Mit der Unit LazHelpHTML kann man den Browser auf dem laufenden System finden.



oder mit finddefaultbrowser
http://lazarus-ccr.sourceforge.net/docs ... owser.html

hendy
Beiträge: 80
Registriert: Sa 11. Apr 2009, 17:01
OS, Lazarus, FPC: Windoof (L 0.9.26 FPC 2.2.2)
CPU-Target: 32Bit

Re: Einfach nur eine URL öffnen

Beitrag von hendy »

Ok danke für die Antworten, habe aber nur laz 9.28.2.
Ich mach das dann für windows.
Es hat jetzt funktioniert. :D

Code: Alles auswählen

uses windows,shellapi;
procedure xx;
begin
ShellExecute(Handle, 'open', 'http://www.google.com/',nil,nil, SW_SHOWNORMAL);
end;

:D
Dankt monta !!

Modellman
Beiträge: 2
Registriert: Do 8. Nov 2012, 19:07

Re: Einfach nur eine URL öffnen

Beitrag von Modellman »

Das geht viel einfacher.
Erstmal oben unter uses "LCLIntf" hinzufügen.

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls, LCLIntf;

Dann z.B. bei einem Button eingeben:
OpenUrl('DeineUrl').

procedure TForm1.Button1Click(Sender: TObject);
begin
OpenURL('http://www.youtube.com/user/finnglinkmovies')
end;

Wenn man nun auf den Knopf klickt, sucht sich das Programm einen installierten Browser aus und öffnet damit die URL.
Ich hoffe ich konnte helfen,

Finn Glink

P.S.:Funzt bei glaub ich allen Betriebssystemen/Plattformen

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Einfach nur eine URL öffnen

Beitrag von m.fuchs »

Modellman hat geschrieben:Das geht viel einfacher.

Heutzutage geht das so einfach. Aber als der die Frage vor fast drei Jahren (!) aufkam, gab es den von dir beschriebenen Weg noch nicht. Wieder einmal ein Beispiel dafür, wieviel besser und einfacher viele Funktionen von Lazarus und Freepascal geworden sind.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten