Need Help :) Button soll Link aufrufen
-
Servus, ich hab schon seit einiger Zeit in der Berufsschule Erfahrung mit C++ gesammelt aber das ist schon etwas her und daher bin ich auch leider nicht mehr so auf dem Laufenden aber egal.
Das was ich in meinem Programm will ist das wenn man auf einen Button klickt das sich eine HTML Seite öffnet die mit dem Button verlinkt ist. Nur ich habe grade keinen Schimmer wie... Zur Info ich benutze den C++ Builder XE von Embarcadero was früher mal der Borland Builder war.Für ein kleines Tutorial wäre ich dankbar
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum VCL (C++ Builder) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Im Programm oder im Standartbrowser ?
Standartbrowser:
ShellExecute(NULL,NULL,"http://www.google.de",NULL,NULL,SW_SHOWNORMAL);
im Builder:
CppWebBrowser, aber dazu kann sicher noch jemand anders mehr sagen
EDIT: es gibt da zwei oder drei Komponenten die da ähnlich heißen, ich kenne aber momentan den Unterschied nicht. Ich benutze sie kaum.
-
-
danke für die antworten aber jetzt bekomme ich beim compilen folgende fehler:
[BCC32 Fehler] Unit1.cpp(151): E2034 Konvertierung von 'char[5]' nach 'const wchar_t *' nicht möglich
Vollständiger Parser-Kontext
Unit1.cpp(149): Analyse: void _fastcall TForm1::SpeedButton1Click(TObject
[BCC32 Fehler] Unit1.cpp(151): E2342 Keine Übereinstimmung des Parametertyps 'lpOperation' ('const wchar_t *' erwartet, 'char *' erhalten)
Vollständiger Parser-Kontext
Unit1.cpp(149): Analyse: void _fastcall TForm1::SpeedButton1Click(TObjectich hab das so gemacht:
void __fastcall TForm1::SpeedButton1Click(TObject *Sender) { AnsiString URL = "http://google.de/"; ShellExecute(0, "open", URL.c_str() ,0,0,SW_SHOWDEFAULT); }
}
-
versuch
ShellExecute(0, L"open", URL.w_str() ,0,0,SW_SHOWDEFAULT);
-
wenn ich das so abändere wie du schreibst:
void __fastcall TForm1::SpeedButton1Click(TObject *Sender) { AnsiString URL = "http://google.de/"; ShellExecute(0, L"open", URL.w_str() ,0,0,SW_SHOWDEFAULT); }
ist der fehler weg aber dann kommt
[BCC32 Fehler] Unit1.cpp(151): E2316 'w_str' ist kein Member von 'AnsiString'
wenn ich pben die AnsiString Zeile weglasse kommt "Undefiniertes Symbol 'URL'"
-
ja ähm, er möchte nen WideString
Dann würde ich sagen, das du ihm den geben solltestAlso nicht AnsiString sondern WideString.
Finde ich aber komisch, bei mir fordert der Builder nur nen const char*.
Aber ich habe auch eine ältere Ausgabe.EDIT:
Ich meine UnicodeString hatte die fkt w_str.
-
geilo
klappt
kannst mir auch noch sagen bei der funktion PlaySoundPlaySound("wave\\Datei.wav", NULL, NULL );
wo kommt die Datei.wav hin? in den Project Ordner?
-
Die ist im ordner wave im Ordner des Programmes.
ABER ACHTUNG ! Es kann passieren, dass sich der Ursprungsort dieses relativen Pfades verschiebt, durch Winapifunktionen.Deshalb würde ich immer mit
ParamStr(0) // oder 1, bin mir grad nicht sicher
Den Pfad des Programmes lesen und mit dem + den Rest anfügen
Also:PlaySound((ParamStr(0) + "\\wave\\Datei.wav").c_str(),NULL,NULL);
falls du mp3 Dateien abspielen willst benutze entweder den TMediaPlayer:
// Im Builder wurde die Komponente TMediaPlayer reingezogen und nach "Player" umbenannt. // Die Eigenschaft Visible ist auf false gesetzt Player->FileName = ParamStr(0) + "\\mp3\\Datei.mp3"; Player->Open(); Player->Wait = true; // wartet bei play bis zum Ende der Wiedergabe. Ansonsten läuft das Programm nach play weiter // Kann, wenn asynchrone Wiedergabe gewünscht, vernachlässigt oder auf false gesetzt werden. Player->Play();
oder mit MciSendString bzw. MciSendCommand.
Da habe ich aber grad die Syntax der Funktionen nicht im Kopf.
-
Bitte die Faustregel beachten:
Ein Thema pro Thread, ein Thread pro Thema.
-
Danke Tim06TR, das mit dem Player also Mp3 geht schon mal nur wenn ich das so mache
Player->FileName = ParamStr(0) + "\\mp3\\Cryofarestlesssoul.mp3"; Player->Open(); Player->Wait = true;
kommt nachdem play drücken das die angeforderte datei in project1 nicht gefunden werden kann.
mach ich das so
Player->FileName = ParamStr(0) + "D:\Kram\Project\\mp3\\Cryofarestlesssoul.mp3"; Player->Open(); Player->Wait = true;
kommt "Im Projekt Project1 ist eine Exception der Klasse EMCIDeviceError mit der Meldung "Fehler beim Starten von MCI." aufgetreten."
bestimmt mache ich einen Fehler bei der verzeichnisangabe.
und sorry Jansen
-
Schau dir mal an, was genau in ParamStr(0) drinsteht. Wenn das (was ich vermute) eine aufbereitete Version von argv ist, steht dort nicht nur der Pfad, sondern der Exe-Name - und den mußt du notfalls rauswerfen.
-
versuche es mal damit:
AnsiString workpath=ExtractFilePath(Application->ExeName); Player->FileName = workpath + "mp3\\Cryofarestlesssoul.mp3";
(Der doppelte Backslash vor mp3 ist absichtlich weggelassen!)
Es wurde hier schon öfter ausdiskutiert das ParamStr(0) nicht immer das richtige Ergebnis bringt, daher ist ExtractFilePath vorzuziehen.
Gruß myerscola
-
CStoll schrieb:
Schau dir mal an, was genau in ParamStr(0) drinsteht. Wenn das (was ich vermute) eine aufbereitete Version von argv ist, steht dort nicht nur der Pfad, sondern der Exe-Name - und den mußt du notfalls rauswerfen.
richtig, das habe ich vergessen.
Ich benutze dafür auch sonst eine selbstgebastelte Funktion.
-
also ich bin zwar sehr dankbar für eure ganzen antworten aber irgendwie bringt das bis jetzt leider nicht viel
habe das jetzt so gemacht wie myerscola es gepostet hat aber es kommt immer noch
void __fastcall TForm1::PlayerClick(TObject *Sender, TMPBtnType Button, bool &DoDefault)
{
AnsiString workpath=ExtractFilePath(Application->ExeName);
Player->FileName = workpath + "mp3\\Cryofarestlesssoul.mp3";
Player->Open();
Player->Wait = true; // wartet bei play bis zum Ende der Wiedergabe. Ansonsten läuft das Programm nach play weiter
// Kann, wenn asynchrone Wiedergabe gewünscht, vernachlässigt oder auf false gesetzt werden.
Player->Play();
}hab ich da vielleicht irgendwo einen Schreibfehler oder sowas drin den ich nicht entdecke?
void __fastcall TForm1::PlayerClick(TObject *Sender, TMPBtnType Button, bool &DoDefault) { AnsiString workpath=ExtractFilePath(Application->ExeName); Player->FileName = workpath + "mp3\\Cryofarestlesssoul.mp3"; Player->Open(); Player->Wait = true; Player->Play(); }
-
also ich bin zwar sehr dankbar für eure ganzen antworten aber irgendwie bringt das bis jetzt leider nicht viel
habe das jetzt so gemacht wie myerscola es gepostet hat aber es kommt immer noch
Erste Gelegenheit für Exception bei $7506B727. Exception-Klasse EMCIDeviceError mit Meldung 'Die angeforderte Datei wurde nicht gefunden. Stellen Sie sicher, dass Pfad- und Dateiname richtig sind.'. Prozess Project1.exe (3244)
}hab ich da vielleicht irgendwo einen Schreibfehler oder sowas drin den ich nicht entdecke?
void __fastcall TForm1::PlayerClick(TObject *Sender, TMPBtnType Button, bool &DoDefault) { AnsiString workpath=ExtractFilePath(Application->ExeName); Player->FileName = workpath + "mp3\\Cryofarestlesssoul.mp3"; Player->Open(); Player->Wait = true; Player->Play(); }
und sorry wegen doppelpost
-
Eigenlich sagt doch die Fehlermeldung aus das die Datei nicht gefunden wird.
Also überprüfe ob der Pfad zur Datei stimmt mittels Debugger und ob diese Datei auch im Verzeichnis vorhanden ist.
-
Prüfe doch mal mit
ShowMessage(Player->FileName);
und guck dir an was da drin ist, kurz bevor du öffnest.
-
also mit ShowMessage(Player->FileName);
erscheint im PopUp Fenster nix, da sollte ja wohl die mp3 Datei drin stehen...aber warum findet der das nicht? wo soll die mp3 datei denn rein?
ich habe diese im Projekt Ordner also da wo sich auch die Unit1 Dateien befinden und ich habe die Datei auch nochmal in den Ordner gepackt wo die Compilten Dateien sich befinden das sind zwei Unterordner des Projekt Ordners also so
Project\Debug\Win32 im "Win32" Ordner befindet sich die Mp3 und im "Project" Ordner.Wo soll die sonst rein wenn nicht da? Noch als zusatz habe den Builder auf
Installiert aber der Project Ordner ist auch auf
gibts da Probleme mit?
/EDIT: Na toll jetzt gehts, hätte man mir auch sagen können das ein "MP3" Ordner mit der Mp3 im Debug Ordner liegen muss
Naja egal, wie bekomme ich jetzt noch hin das man das programm weiterhin benutzen kann wenn die mp3 läuft? denn jetzt freezed das tool immer und hört erst auf damit wenn der mp3 track durch ist... wahrscheinlich muss die mp3 bzw der player im eigenen thread laufen oder? nur wie
-
Player->Wait = false;