21. januar 2003 - 14:41Der er
48 kommentarer og 1 løsning
Hjææælp...vise en HTML fil fra VB
Håber der er en der kan hjælpe med følgende.
Jeg har lavet en brugervejledning i HTML fil. Nu kunne jeg tænke mig at når en bruger i mit VB program trykker på F1 på en form vises denne fil i browseren ved det bookmark ang den form.
Nogen der har en eller anden ide til hvordan den løses ?
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Const SW_SHOWNORMAL = 1
Private Sub Command1_Click() ShellExecute hWnd, "open", "C:\temp\test.html", vbNullString, vbNullString, SW_SHOWNORMAL End Sub
Er det en hjælpefil specifikt til programmet? - så kunne du kompilere den til en chm-fil, hvor du får den "rigtige" hjælpedialog op, som du kender fra alverdens hjælpeprogrammer. Det virker meget mere prof end at starte en browser- synes jeg. Herefter kan du kalde chm-filen fra VB med
Det er meget mere simpelt end det måske virker - har selv lavet et program med tilhørende hjælpefiler, og det virker super - og ser som sagt meget mere prof ud end at åbne i en browser - synes jeg
PS: Hvis ovenstående funktion "ShellExecute" skal virke, skal du naturligvis først erklære funktionen:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long /Martin
Hvis du vil bruge explorer til at vise din html-fil med, kan du jo også bruge følgende meget simple metode, der kræver, at du kender stien til explorer:
Der skal du så ændre stien til iexplorer.exe, ændre filnavnet på html-filen samt ændre hvilket navn den skal gå til på html-siden - i mit tilfælde har jeg valgt afsnit4, hvilket kræver, at der et sted i html-filen står <a name="afsnit4"></a> - iexplorer vil så åbne html-filen, og vise den linie hvor ovenstående html-kode står som øverste linie :o)
HMMmmmm så var det derfor jeg ikke kunne få shell til at virke :O) Jeg blev lidt sur og lavede min egen meget simple version, den virker uden brug af .chm :O)
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyF1 Then With Form2 .Show .WebBrowser1.Navigate "G:\bogtest.htm#b3" End With End If End Sub
Jeg kan ikke få det til at virke med Shell, kun med ShellExecute. Og det er naturligvis total fedt, meeen hvordan får jeg den kaldt med et bookmark i ShellExecute ?...
Fra hjælpen: Runs an executable program and returns a Variant (Double) representing the program's task ID if successful, otherwise it returns zero. If the Shell function successfully executes the named file, it returns the task ID of the started program. The task ID is a unique number that identifies the running program. If the Shell function can't start the named program, an error occurs.
PS: Overvej en .chm-fil - det ER altså 10 gange smartere. Du kompilere din html-fil med noget shareware, der kan hentes fra de ovenstående links jeg gav. Herefter kalder du blot chm-filen i stedet for html-filen :o) - Bare min personlige mening :o))
Private Declare Function FindExecutable Lib "shell32" _ Alias "FindExecutableA" _ (ByVal lpFile As String, _ ByVal lpDirectory As String, _ ByVal sResult As String) As Long
Private Declare Function GetTempPath Lib "kernel32" _ Alias "GetTempPathA" _ (ByVal nSize As Long, _ ByVal lpBuffer As String) As Long
Private Const MAX_PATH As Long = 260 Private Const ERROR_FILE_NO_ASSOCIATION As Long = 31 Private Const ERROR_FILE_NOT_FOUND As Long = 2 Private Const ERROR_PATH_NOT_FOUND As Long = 3 Private Const ERROR_FILE_SUCCESS As Long = 32 'my constant Private Const ERROR_BAD_FORMAT As Long = 11
Private Sub Command1_Click()
Dim success As Long Dim sBrowser As String
'success is passed and filled in the routine sBrowser = GetBrowserName(success)
'possible return values from the call 'returned in success Select Case success
'the call succeeded Case Is >= ERROR_FILE_SUCCESS
Shell (sBrowser & " c:\temp\test.html#a2") Exit Sub
'other possible return values Case ERROR_FILE_NO_ASSOCIATION Case ERROR_FILE_NOT_FOUND Case ERROR_PATH_NOT_FOUND Case ERROR_BAD_FORMAT Case Else: End Select
'if this far the call failed MsgBox "No dice!"
End Sub
Private Function GetBrowserName(dwFlagReturned As Long) As String
Dim hFile As Long Dim sResult As String Dim sTempFolder As String
'get the user's temp folder sTempFolder = GetTempDir()
'create a dummy html file in the temp dir hFile = FreeFile Open sTempFolder & "dummy.html" For Output As #hFile Close #hFile
'get the file path & name associated with the file sResult = Space$(MAX_PATH) dwFlagReturned = FindExecutable("dummy.html", sTempFolder, sResult)
'clean up Kill sTempFolder & "dummy.html"
'return result GetBrowserName = TrimNull(sResult)
End Function
Private Function TrimNull(item As String)
Dim pos As Integer
pos = InStr(item, Chr$(0))
If pos Then TrimNull = Left$(item, pos - 1) Else: TrimNull = item End If
Hmm - spørgsmålet er jo lukket - såå, jeg smutter, med mindre nadia viser den linie med shell-kaldet der åbenbart ikke virker, så jeg kan rette den. Hvis nadia har installeret internet explorer, KAN hun åbne en html-fil i den med EEN kodelinie, som jeg allerede har givet. UDEN fejl! Over & Out, Martin
Ja, nadia har sikkert IE men da der er lavet en hjælpefil er det jo nok meningen at andre også skal bruge programmet og måske en af disse bruger andre browsere end IE.
Derfor mener jeg at det er et must at checke for hvilken browser brugeren.
nadia >> Hvis du stadig roder med shell komandoen er det denne linie: Shell (sBrowser & " c:\temp\test.html#a2") ' sBrowser er stien til defaultbrowser.
Der i mit eksempel starter browseren og viser .html filen ved det aktuelle bookmark.
dk_akj: Det kan du have ret i - selvom nadia endnu ikke har fortalt, om det skal kunne køre på mere end een PC? Umiddelbart var hun jo tilfreds med min shell-løsning, som hun dog ikke kunne få til at virke, og som rigtigt nok kun virker på hendes lokale lokal PC (og andre PC'ere der tilfældigvis har samme sti til iexplorer)...
Men dette spørgsmål er ved at tage den klassiske udvikling, hvor en spørger stiller et lidt for bredt spørgsmål, uden at forklare nærmere hvilken løsning der ønskes. Og så sidder vi og finder på 3-4 alternativer, hvoraf de fleste sikkert på forhånd viser sig at være ubrugelige, men det kunne vi jo ikke vide, fordi spørgeren har ikke forklaret, hvad det egentligt skal bruges til.
Det har jeg oplevet så tit, så derfor smutter jeg med mindre det bliver lidt mere konkret - Hvilken løsning ønskes der (skal det virke på ALLE PC'eren, eller kun på hendes egen), vil hun bruge shell eller chm-løsningen, hvordan ser hendes kode, der ikke virker, ud?
Jeg syntes jeg havde fortalt, at jeg ikke kunne få Shell til at virke overhovedet, og derfor ville bruge ShellExecute uden bookmark. Og endelig har du jo fået pointene som egentlig skulle have været til dk akj (sorry dk akj...ved ikke lige hvad der gik galt) så hvorfor mugge nu ?
Jeg er ikke muggen - jeg prøver alt hvad jeg kan på at hjælpe dig.
Så
1) Skal det kun virke på din egen PC, eller på en masse andre
Hvis det kun skal virke på din egen PC, så kan du sagtens bruge shell-løsningen.
2) Hvis shell-løsningen kan bruges til dit formål, gider du så ikke vise din kode, så vi kan få rettet fejlen?
3) Hvis shell-løsningen IKKE virker til dit formål, fordi det skal virke på andre PC'ere, hvad vil du så - bruge shellexcecute eller chm? Og hvis du vil bruge shellexecute, har du så fået det til at virke? Hvis du vil bruge chm- har du så fået det til at virke?
Det er svært at hjælpe når man ikke ved hvad der skal hjælpes med ;o)
Faktisk er det eneste der har virket efter hensigten mit forslag om at bruge webbrowser1.navigate Men hvorfor kan man ikke det samme i shellexecute? Shellexecute ignorerer fuldstændig blabla.htm#bookmark
En lille detalje, der først kommer frem når vi kan SE din kode - her ca. 20 indlæg inde i spørgsmålet :o)
Du fik egentligt løsningen med shell som indlæg nr. 5, 17:26:06. Det skal ikke opfattes som en sur mine - overhovedet ikke - men hvis man fra starten forsøger at sige hvad præcist man vil, og viser den kode man evt. har der fejler - ja, så kan man ofte undgå at spilde en masse tid... (som kunne være brugt på min elskede .chm-løsning i stedet, ha ha) Som sagt - ingen sure miner ;o)
Og held og lykke, nu når det endeligt virker :o)))
Nu ved jeg godt jeg er irriterende, men NU VIRKER DET MED BOGMÆRKE !!!!!!! Er der en der gider forsøge ? retval = Shell("""C:\Programmer\Internet Explorer\IEXPLORE.EXE"" G:\bogtest.html#b3", vbMaximizedFocus)
Med et par ekstra gnyffer virker det....det var mellemrummet i stien den nok døde på
Og når nu i er så dygtige ved i så noget om DCOM...på win2000...det driller ret meget og skal være færdigt i dag... Sig til hvis jeg skal oprette et nyt spørgsmål
Prøv lige at lave en Shell med bookmark der har App.Path som værdi til html filen.... Vil smadder gerne se den...for der knækker filmen. Jeg kan få der til at virke hvis jeg skriver stien fuldstændig.
JEG HAR VALGT DEN ANDEN LØSNING men er nysgerrig
PS har løst mit DCOM problem...lidt rettigheder og en ref. til serveren i koden...tænk at det skulle tage så lang tid...
Naturligvis forudsat at App.path ikke er i roden af et drev, da der så vil stå c:\\test.html (en "\" for meget). Er app.path ikke roden af et drev, men en subfolder, virker det...
For fand.. da hvor kan vi træde i det samme mange gange.
JA shell-løsningen virker KUN hvis stien til IE passer!!! Det er sgu da logisk, og det tror jeg vi efter snart 30 indlæg har fattet. Ligger IE et andet sted, må man rette stien, vælge en anden løsning, whatever...
Som sagt - jeg ved STADIG ikke om det er en løsning der skal bruges på andre PC'ere, så dit "bør der undersøges" gælder kun i de tilfælde, programmet skal kunne køre på flere PC'ere. Og det aner jeg ikke om det skal. Men det er også bedøvende ligegyldigt - det har vi debateret til hudløshed, og spørgsmålet var hvordan man får shell-løsningen til at virke med app.path. Det svarede jeg på...
Sorry - kunne heller ikke lade være *G*
Dette var mit SIDSTE indlæg i denne tråd - forhåbentligt ;o)
Selv tak :o) Og pas på med gnyfferne - VB kan ikke lide når der er for mange/for få af dem...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.