Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Standardbrowser öffnen (https://www.delphipraxis.net/1509-standardbrowser-oeffnen.html)

Megabyte 4. Dez 2002 13:37


Standardbrowser öffnen
 
Hallo zusammen
habe im Forum folgenden Beitrag zu diesem Thema gefunden gefunden: http://www.delphipraxis.net/viewtopic.php?t=58
Nun habe ich folgendes programmiert:
Delphi-Quellcode:
procedure TForm3.Label4Click(Sender: TObject);
begin
 Uses ShellApi;
 Shell execute( 0, nil, 'http://www.delphipraxis.net', nil, nil, SW_SHOW);
end;

end.
Nun erscheint immer folgender Fehler: :twisted: :twisted:
Statement expectet but USES found
Undeclared indentifier : Shell
could not compile used Unit.X

:( Was mache ich falsch? Was muss ich deklarieren damit bei einem Click
auf das Label der Browser die gewünschte Webseite öffnet?

Danke für die Hilfe
cu Megabyte

theomega 4. Dez 2002 13:40

zwischen das shell und das execute muß irgendein Zeichen, entweder ein "_" oder gar nix!

Daniel 4. Dez 2002 14:15

Re: Standardbrowser öffnen
 
Hallo MegaByte,

zuerst Folgendes: Die Uses-Anweisung darf nicht innerhalb einer Prozedur stehen sondern folgt überlicherweise nach dem Schlüsselwort 'interface' oder 'implementation'. Schaue in Deiner Unit nach: Du findest dort bereits die Uses-Anweisung gefolgt von einer Liste von Units. Diese Liste verlängerst Du einfach um den Eintrag 'ShellAPI'.

Ansonsten musst Du nur das Leerzeichen zwischen 'Shell' und 'Execute' entfernen, da es sich in der Tat um einen Befehl namens 'ShellExecute' handelt.
:wink:

Delphi-Quellcode:
procedure TForm3.Label4Click(Sender: TObject);
begin
  Shellexecute( 0, nil, 'http://www.delphipraxis.net', nil, nil, SW_SHOW);
end;

Grüße,
Daniel

jbg 4. Dez 2002 14:35

Es wäre vielleicht besser, wenn man ShellExecute in diesem Fall als 2. Parameter ein 'open' anstatt nil übergibt. Wenn nil übergeben wird, wird die Standard Aktion ausgeführt, die nicht unbedingt 'open' sein muss.
Delphi-Quellcode:
ShellExecute(0, 'open', 'http://www.delphipraxis.net', nil, nil, SW_SHOW);

Das am meisten falsch geschriebene Wort steht natürlich auch wieder im Topic.

Es heißt: Standard, denn es hat nichts mit einer Art zu tun und auch nicht mit der "Art zu Stehen".

trebormillenium 4. Jan 2003 15:08

Hi
habe ne Frage, also ich habe auch den befehl genommen und wollte fragen ob man den noch erweitern kann? Also so das man den IE (oder was man immer nimmt) neu öffnet. Also Problem ist, das die URL dann im IE-Fenster geöffnet wird den ich schon geöffnet habe und in dem ich schon surfe! Wollte fragen ob es möglich ist das man ein neues IE-Fenster aufmachen kann und die Seite dann darin laden kann!

MFG
Trebor

Chewie 4. Jan 2003 17:09

Es wäre dann möglich, wenn du per ShellExecute nicht die URL aufrufst, sondern den Browser startest und die gwünschte Website als Parameter anhängst. Das Problem hierbei ist, dass 1. nicht jeder Browser diese Parameterübergabe unterstützen muss und 2. du zuerst herausfinden müsstest, welcher Browser sich auf dem System befindet und in welchem Ordner er ist. Aber möglich ist es.

trebormillenium 4. Jan 2003 17:24

Gut da ich noch nicht viel mit Delphi gemacht habe und das Programm eh nur für Windows XP sein soll hoffe ich das es kein Problem ist!

Könnten Sie mir verraten wie ich 1. Das Programm (Internet Explorer 6) ausführe und dann den Parameter dahinter schreibe?

Im Vorraus schonmal Dankeschön

Chewie 4. Jan 2003 18:00

Dort, wo im obigen Beispiel die URL angegeben wird, muss der Pfad zum IE hin. Und im nächsten Parameter werden die Parameter zum Öffnen übergeben.
Um die Delphi-Praxis anzuzeigen also folgendes geschrieben werden:
Delphi-Quellcode:
ShellExecute(Handle,'open','C:\Programme\Internet Explorer\IExplore.exe','www.delphipraxis.net',nil,SW_SHOW);
Falls der Pfad zum Browser anders sein sollte, muss dies natürlich angepasst werden.

MrSpock 4. Jan 2003 18:05

Hallo trebormillenium,

beachte aber, dass das Programm möglicherweise auch außerhalb deiner Umgebung laufen könnte. Wie oben schon erwähnt, solltest du versuchen, das Programm so zu schreiben, dass auch andere Browser wie Netscape, Opera oder Mozilla unterstützt werden. Denn es soll Leute geben, die können den M$ Browser überhaupt nicht leiden :roll: .

MathiasSimmack 4. Jan 2003 18:09

Lösung: den Browser, der für HTMLs zuständig ist, aus der Registry auslesen, und dann die URL übergeben!

Chewie 4. Jan 2003 18:11

Es ist aber auch nicht gesagt, dass jeder Browser die URL einfach als Parameter akzeptiert.

trebormillenium 4. Jan 2003 18:15

Aha
Naja Problem könnte man ja dadurch lösen das man den Pfad des Explorers angeben kann! Es geht mir aber jetzt in erster Linie darum, dass das Programm bei mir (Win XP) läuft!
Deshalb würde ich das Programm erstmal für Windows XP und Internet Explorer 6.0 ans laufen bringen!
Dann falls ich mich entschließen sollte das Programm weiter zugeben könnte man ja sowas noch ändern!

Und nochwas an MathiasSimmack --> Wie geht das? :-) Bin noch net soweit mit Delphi, lerne es z.Z. in der Schule aber da lernt man natürlich nur Std. Sachen deshalb will ich etwas mehr lernen!

MFG Trebor

MathiasSimmack 4. Jan 2003 18:38

Eine einfache Lösung für den IE:
Delphi-Quellcode:
ShellExecute(0,
  'opennew', // <-- !
  'http://www.delphipraxis.net',
  nil,
  nil,
  SW_SHOWNORMAL);
Es wäre natürlich möglich, dass andere Browser diesen Schlüssel auch anlegen. Das wäre natürlich am einfachsten, aber als Pessimist würde ich erst mal nur auf den IE tippen. Daher die Lösung #2: mit der "Registry"-Unit das Programm herausfinden, das für "http" zuständig ist.
Delphi-Quellcode:
uses
  Registry;

{ ... }

var
  reg : TRegistry;
  cmd : string;
begin
  reg := TRegistry.Create(KEY_READ);
  with reg do
  try
    RootKey := HKEY_CLASSES_ROOT;
    if(OpenKey('http\shell\open\command',false)) then
    try
      cmd := ReadString('');
    finally
      CloseKey;
    end;
  finally
    Free;
  end;

  ShellExecute(0,
    'open',
    pchar(cmd),
    'http://www.delphipraxis.net',
    nil,
    SW_SHOWNORMAL);
end;
(Ungetestet aus dem Kopf geschrieben. Bitte berücksichtigen!)

Sollte durch irgendwelche Widrigkeiten der "http"-Schlüssel nicht vorhanden sein, kann man zuerst ".html" öffnen und dort den Standardstring auslesen (s. "cmd := ReadString('');"). Dieser verweist auf einen zweiten Schlüssel (meist "htmlfile"), der dann wieder den Pfad zum Programm enthält:
Code:
htmlfile/shell/open/command
(bitte RegEdit benutzen und die Pfadnamen im Zweifelsfall suchen)

Ich glaube, für solche Sachen gab´s auch ´ne einfachere API-Funktion. Aber da muss ich erst mal gucken; kann sein, dass ich da was verwechsele. Vielleicht weiß die Antwort schon jemand, ansonsten melde ich mich noch mal, wenn sie mir wieder einfällt.

MathiasSimmack 4. Jan 2003 20:09

Mir ist gerade eingefallen, dass sich z.B. der IE manchmal mit einem zusätzlichen Parameter in der Registry verewigt. In meinem Fall (Win98) ist das so.
Code:
"C:\PROGRA~1\INTERN~1\iexplore.exe" -nohome
Dieser Parameter "-nohome" ist notfalls aus dem String zu entfernen und an die URL ranzuhängen. Wer sich diesen Copy/Delete-Quark sparen will, kann und sollte z.B. Luckies RunProcess benutzen, weil man hier das Kommando inkl. aller Parameter als kompletten String übergeben kann.

Christian Seehase 4. Jan 2003 20:22

Moin Mathias,

das man den Parameter (-nohome) erst entfernen muss hab' ich auch mal gedacht. Muss aber nicht sein, funktioniert auch wenn der stehenbleibt.

trebormillenium 4. Jan 2003 20:52

So jetzt zur nächsten Frage :D, wie kann ich in den Code eine Variabele bei der Adresse einfügen, so dass man z.B. die Adresse vorher manuell in ein Edit-Feld eingeben kann und das Programm die dann öffnet?

Delphi-Quellcode:
begin
ShellExecute(Handle,'open','C:\Programme\Internet Explorer\IExplore.exe','http://www.delphipraxis.net',nil,SW_SHOW);
end

Christian Seehase 4. Jan 2003 20:55

Moin Trebor,

ob Du der Funktion eine Konstante oder eine Variable übergibst spielt keine Rolle, nur dass Du dann statt Edit1.Text PChar(Edit1.Text) schreiben musst, da ein PChar erwartet wird (was der Compiler bei einer Konstante autmatisch erledigt)

nailor 4. Jan 2003 20:55

Ohne Garantie:

Delphi-Quellcode:
begin
ShellExecute(Handle,'open','C:\Programme\Internet Explorer\IExplore.exe','http://www.delphipraxis.net' [color=#ff0000] + Pchar(edit1.text)[/color],nil,SW_SHOW);
end

//Falls das nicht geht, mach voher eine Variable:

var temp : string;
begin
temp := 'http://www.delphipraxis.net' + edit1.text;
ShellExecute(Handle,'open','C:\Programme\Internet Explorer\IExplore.exe', temp,nil,SW_SHOW);
end

Chewie 4. Jan 2003 20:57

Der vierte Parameter (der, in dem die URL stehen muss :wink: ), ist vom Typ PChar. Die Eigenschaft Text eines TEdist ist vom Typ String. Um einen String in einen PChar umzuwandeln, benutzt man folgenden Aufruf:
Delphi-Quellcode:
PChar(Edit1.Text));
Folglich sieht das bei dir dann so aus:
Delphi-Quellcode:
ShellExecute(Handle,'C:\Programme\Internet Explorer\IExplore.exe',PChar(Edit1.Text),nil,SW_SHOW);
[EDIT]Wow, gleich drei auf einmal :wink: [/EDIT]

trebormillenium 4. Jan 2003 21:06

So habe beides getestet und habe folgendes Problem:

Der IE öffnet dann die Seite "http://www.delphipraxis.net + edit1.text" oder bei der Variante mit der Variable öffnet er die Seite "temp"
:-)
Das hatte ich nämlich vorher auch schon so ausprobiert :coder: und es klappte bei mir auch net! Hat sonst vielleicht noch einer eine Idee?

Christian Seehase 4. Jan 2003 21:58

Moin Trebor,

ich wüsste jetzt nicht mehr, wo ein Problem ist.

Chewies Beispiel funktioniert doch.
(viel anders kann man es bei Deiner Vorgabe wohl kaum machen).

trebormillenium 4. Jan 2003 22:06

Hej das klappt sogar :-)

So wollte mich mal bedanken!

Falls ich noch mehr Probleme habe melde ich mich wieder :-)

trebormillenium 4. Jan 2003 22:11

Jo I know ;-)

Jetzt kommt das nächste Problem :D

Also was ist wenn ich die URL habe und dann etwas dahinter setzen will?

z.B.
http://www.delphipraxis.net/viewtopic.php?t=1717

Also will ich das anstatt die ganze Adresse nur die Nummer manuell eingetragen wird und die seite dann so komplett geöfnet wird.

http://www.delphipraxis.net/viewtopic.php?t=1717

Problem ist, dass ich nicht weiß wie ich an die URL den Inhalt des Edit-Feldes anhängen kann!

nailor 4. Jan 2003 23:06

Siehe mein Beitrag oben, dann mach aus:

'http://www.delphipraxis.net' den Teil, der feststeht und dann häng mit "+" den Text des Edits dran:

+ Pchar(edit1.text)

also:

Delphi-Quellcode:
begin
ShellExecute(Handle,'open','C:\Programme\Internet Explorer\IExplore.exe',http://www.delphipraxis.net/posting.php?mode=reply&t=' + Pchar(edit1.text),nil,SW_SHOW);
end

//Wobei in Edit1 die Nummer des Beitrag steht, den du beantworten willst.

trebormillenium 4. Jan 2003 23:29

Hmm sorry das klappt aber net!

[Error] U_Countdown.pas(74): Incompatible types: 'String' and 'PChar'

Problem ist das die URL durch zwei ' angezeigt wird und der vor dem Plus die natürlich auch brauch. Deshalb macht der das dann schon zu! Sollte ich das ' dahinter schreiben funktionierts net da der das dann einfach dahinter schreibt und dann nichts heraus kommt!

RomanK 4. Jan 2003 23:45

Delphi-Quellcode:
ShellExecute(Handle,'open',PCHAR('C:\Programme\Internet Explorer\IExplore.exe'),Pchar('http://www.delphipraxis.net/posting.php?mode=reply&t='+edit1.text),nil,SW_SHOW);
tut aber bei mir nicht!
WinXP IE 6.0

trebormillenium 5. Jan 2003 00:03

Klappt das jetzt bei dir oder net? Habe das gleiche System und gleichen IE und bei mir klappts net :-(

Christian Seehase 5. Jan 2003 00:07

Moin Roman,

und was geht jetzt bei Dir nicht?

Ist bei Dir der IE vielleicht in einem anderen Pfad installiert?

Bei mir geht's (ich hab den Pfad vor dem IE einfach weggelassen, der liegt i.d.R. eh' im Suchpfad)

BTW: W2K SP 2 IE 6 SP 1

RomanK 5. Jan 2003 00:09

Hoi

ES TUT NICHT!!!!

Die opennew-Variante von MathiasSimmack aber auch nicht !!!

trebormillenium 5. Jan 2003 00:13

Ach es klappt doch hatte mich vertan sorry :-) Vielen Dank!

Noch ne Frage die ich aber erst morgen lösen will denn ich gehe jetzt pennen :-)

Wie kann ich Einen Ton ausgeben lassen (Piepen etc.)?

Naja bis 'morgen'

RomanK 5. Jan 2003 00:14

SCHE*** :oops: :oops:
Bei mir sind die Programme in einem anderen Order. :oops:
Also es tut jetzt doch. :roll:

PS: Mach nen neuen Thread auf, bzw. SUCHE erstmal.

Christian Seehase 5. Jan 2003 00:18

Moin Trebor,

neues Problem - Neuer Thread bitteschön ;-)

@Roman:
Um es mal mit Deinen Worten auszudrücken:

WAS TUT NICHT??? :mrgreen:

Startet der Explorer nicht, geht er nicht auf die angegebene Adressse?
Was meldet GetLastError, nachdem Du Shellexecute ausgeführt hast?

[EDIT]Duplizität der Ereignisse :mrgreen: [/EDIT]

nailor 5. Jan 2003 00:19

Ein Piepen:

Beep;

Ein Geräusch:

sndplaysound(...);


---------------


Zu spät!

trebormillenium 5. Jan 2003 10:29

Ok ich suche mir das Thema woanders raus! :-) Trotzdem Vielen Danke

Ich denke wir sehen uns im anderem thread :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz