![]() |
Standardbrowser öffnen
Hallo zusammen
habe im Forum folgenden Beitrag zu diesem Thema gefunden gefunden: ![]() Nun habe ich folgendes programmiert:
Delphi-Quellcode:
Nun erscheint immer folgender Fehler: :twisted: :twisted:
procedure TForm3.Label4Click(Sender: TObject);
begin Uses ShellApi; Shell execute( 0, nil, 'http://www.delphipraxis.net', nil, nil, SW_SHOW); end; end. 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 |
zwischen das shell und das execute muß irgendein Zeichen, entweder ein "_" oder gar nix!
|
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 |
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". |
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 |
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.
|
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 |
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:
Falls der Pfad zum Browser anders sein sollte, muss dies natürlich angepasst werden.
ShellExecute(Handle,'open','C:\Programme\Internet Explorer\IExplore.exe','www.delphipraxis.net',nil,SW_SHOW);
|
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: . |
Lösung: den Browser, der für HTMLs zuständig ist, aus der Registry auslesen, und dann die URL übergeben!
|
Es ist aber auch nicht gesagt, dass jeder Browser die URL einfach als Parameter akzeptiert.
|
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 |
Eine einfache Lösung für den IE:
Delphi-Quellcode:
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.
ShellExecute(0,
'opennew', // <-- ! 'http://www.delphipraxis.net', nil, nil, SW_SHOWNORMAL);
Delphi-Quellcode:
(Ungetestet aus dem Kopf geschrieben. Bitte berücksichtigen!)
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; 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:
(bitte RegEdit benutzen und die Pfadnamen im Zweifelsfall suchen)
htmlfile/shell/open/command
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. |
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:
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
"C:\PROGRA~1\INTERN~1\iexplore.exe" -nohome
![]() |
Moin Mathias,
das man den Parameter (-nohome) erst entfernen muss hab' ich auch mal gedacht. Muss aber nicht sein, funktioniert auch wenn der stehenbleibt. |
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 |
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) |
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 |
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:
Folglich sieht das bei dir dann so aus:
PChar(Edit1.Text));
Delphi-Quellcode:
[EDIT]Wow, gleich drei auf einmal :wink: [/EDIT]
ShellExecute(Handle,'C:\Programme\Internet Explorer\IExplore.exe',PChar(Edit1.Text),nil,SW_SHOW);
|
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? |
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). |
Hej das klappt sogar :-)
So wollte mich mal bedanken! Falls ich noch mehr Probleme habe melde ich mich wieder :-) |
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. ![]() Also will ich das anstatt die ganze Adresse nur die Nummer manuell eingetragen wird und die seite dann so komplett geöfnet wird. ![]() Problem ist, dass ich nicht weiß wie ich an die URL den Inhalt des Edit-Feldes anhängen kann! |
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. |
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! |
Delphi-Quellcode:
tut aber bei mir nicht!
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);
WinXP IE 6.0 |
Klappt das jetzt bei dir oder net? Habe das gleiche System und gleichen IE und bei mir klappts net :-(
|
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 |
Hoi
ES TUT NICHT!!!! Die opennew-Variante von MathiasSimmack aber auch nicht !!! |
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' |
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. |
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] |
Ein Piepen:
Beep; Ein Geräusch: sndplaysound(...); --------------- Zu spät! |
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 19:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz