webForumDet fria alternativet

klickbara länkar (label) och minemerad till focus

.NET

3 svar · 456 visningar · startad av Brimba

Medlem sedan dec. 19995 874 inlägg
Frågan#1

Hej!

1
Låt säga att jag har en label med caption "Hemsida". Hur gör man den klickbar till användarens standardwebbläsare?

2
När man har minimerat ett program och vill att det (vid en speciell händelse) skall plockas fram (ovanför alla andra program som är aktiva)
Hur gör man då?
Jag har försökt med:

frmMain.WindowState = 0
frmMain.Show
frmMain.SetFocus

Men det vill inte riktigt fungera.

Tips?

------------------
Mvh
Patrik aka Brimba
<A HREF="http://www.brimba.nu/default.asp?oPID=poll&PollID=19" TARGET=_blank>Skulle du äta på restaurang, om det var rökförbud?
</A>Varför blir mina isbitar inte lika klara som i reklamen?

Medlem sedan dec. 1999707 inlägg
#2

Dim WshShell As Object

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run ("iexplore <A HREF="http://www.sunet.se/")" TARGET=_blank>http://www.sunet.se/")</A>
Set WshShell = Nothing

------------------
/ Torbjörn Hansson, webbutvecklare
Endero Sverige

Medlem sedan dec. 19995 874 inlägg
#3

Är det verkligen standardwebbläsaren?

Det verkar vara mer internet explorer den ropar på.

------------------
Mvh
Patrik aka Brimba
<A HREF="http://www.brimba.nu/default.asp?oPID=poll&PollID=19" TARGET=_blank>Skulle du äta på restaurang, om det var rökförbud?
</A>Varför blir mina isbitar inte lika klara som i reklamen?

Medlem sedan dec. 19991 072 inlägg
#4

Ok, fråga 1:

För att ta fram default-browser använder vi API.t "FindExecutable", som helt enkelt ger oss sökvägen som skulle öppna en viss fil. Detta används alltså till alla sorters filer.
Vad vi gör är att vi skapar en "dummy" fil (html) i tmp-katalogen som vi sedan kör mot API.t, vi får då sökvägen...Skapa bara en label som heter label1 och testa...vid click så kör vi "shell" metoden på sökväg + url.

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
Option Explicit

Private Declare Function FindExecutable Lib "shell32.dll" _
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 Function DetermineDefaultBrowser() As String
Dim BrowserPath
Dim Success As Long
BrowserPath = GetBrowserName(Success)
DetermineDefaultBrowser = BrowserPath
End Function

Private Function GetBrowserName(dwFlagReturned As Long) As String
Dim hFile As Long
Dim sResult As String
Dim sTempFolder As String
sTempFolder = GetTempDir()
hFile = FreeFile
Open sTempFolder & "dummy.html" For Output As #hFile
Close #hFile
sResult = Space$(MAX_PATH)
dwFlagReturned = FindExecutable("dummy.html", sTempFolder, sResult)
Kill sTempFolder & "dummy.html"
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
End Function

Public Function GetTempDir() As String
Dim nSize As Long
Dim tmp As String
tmp = Space$(256)
nSize = Len(tmp)
Call GetTempPath(nSize, tmp)
GetTempDir = TrimNull(tmp)
End Function

Private Sub Label1_Click()
Shell DetermineDefaultBrowser & " <A HREF="http://www.aftonbladet.se"" TARGET=_blank>http://www.aftonbladet.se"</A>
End Sub

...och så fråga 2...

För att göra detta använder vi ett litet API som heter "SetWindowPos" som vi hittar i "user32". Vi börjar därför att deklarerar vårt API-anrop med den konstant som behövs. Vad som krävs för att köra API.t är bla. ditt window-handler, dvs det ID som representerar ditt fönster i windows. Detta får du genom tex.
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
form1.hwnd

När vi sen kör API:t så sätts aktuellt fönster till toppen, men om du nu aktiverar ett annat fönster så hamnar första fönstret bakom igen, så vill du alltså att fönstret stannar uppe hela tiden får du lägga API-anropet i en timer som körs hela tiden, koden ser ut så här:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, y, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Const HWND_TOPMOST = -1
Const TOPMOST_FLAGS = SWP_NOMOVE Or SWP_NOSIZE

Private Sub Command1_Click()
Dim lngRet As Long
Form1.WindowState = 0
lngRet = SetWindowPos(Form1.hWnd, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS)
end sub

Så där nånting, detta förutsätter förstås att du har en knapp som heter command1 och att formuläret hter form1.

Det ska funka fint!

/fredrik
------------------
Fredrik Klarqvist
f.klarqvist@spray.se
http://server.webwerkstaden.se/fredde/

[Redigerat av fredrik den 13 jul 2001]

266 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)