|
Popup menyer
Om ni har Windows 95 installerat på er dator så har ni
kanske märkt att om man trycker på höger musknapp så
får man upp en meny. Detta kan man givetvis också göra
med Visual Basic. Koden ska ligga under objektets MouseDown händelse.
Detta därför att vi ska kunna avgöra om det är vänster
eller höger musknapp som trycks ned.
Skapa en meny med Caption = Popup1 och Name = mnuPopup1. Skapa sedan
en undermeny med Caption = &Förklaring (lägg märke till
"&" tecknet) och Name = mnuFörklaring. Tryck i meny hanteraren
på mnuPopup1 och avmarkera kryssrutan visible, visible ska alltså
vara False. Stäng nu meny hanteraren.
Dubbelklicka på formuläret, gå in i händelsen
MouseDown och skriv:
Private Sub Form_MouseDown(Button
As Integer, Shift As Integer,
_
X As Single, Y As Single)
If Button = 2 Then
PopupMenu mnuPopup1
End Sub
Button är variabeln som håller reda på vilken musknapp
du trycker på. 1 = Vänster, 2 = Höger. Kommandot PopupMenu
är givetvis kommandot som frammkallar menyn. Fulla syntaxet hittar
du nedan och i VB´s hjälpfil.
[object].PopupMenu [menynamn], flaggor, x, y, boldcommand
Förklaringar hittar du i Visual Basics hjälpfil.
Windows katalogen
Med den här lilla koden som jag skrivit kan du ta reda på
i vilken katalog som Windows ligger i. Starta ett nytt projekt med en knapp
och skriv i den:
Obs! Denna kod är bara testad i Win95
med Visual Basic 5.
Private Sub Command1_Click()
'sWin kommer att innehålla Windows katalogen.
Dim sWin As
String
'En For Loop som kollar igenom de 15 första
miljövariablerna.
For i = 1 To 15
sWin = Environ(i)
'Letar efter variabeln
winbootdir.
If UCase(Left(sWin,
11)) = UCase("winbootdir=") Then
MsgBox "Windows katalogen är " & Mid(sWin,
12, Len(sWin) - 11)
Exit For
End If
Next i
End Sub
Starta nu programmet.
Hoppa med Enter
För att få fram funktionen att hoppa mellan olika objekt
med Enter är inte så svårt. Antag att vi har två
text rutor med namnen "Text1" och "Text2". Vi ska hoppa från "Text1"
till "Text2".
Sub Text1_KeyPress(KeyAscii As
Integer)
If KeyAscii = 13 then
KeyAscii = 0 'Ser till
så att system pipet försvinner.
Text2.SetFocus
End if
End Sub
Key Ascii 13 är givetvis ANSI talet för Enter.
Starta program från VB
Att starta program från VB är ganska enkelt. Skriv bara
följande rad. I det här exemplet ligger koden i en knapp (Command1).
Private Sub Command1_Click()
Dim x As Long
x = Shell("notepad.exe", 3)
End Sub
X deklareras I det här fallet som Long. Detta behövs dock
inte i VB5 som "fixar" det själv. Trean står för att starta
programmet maximerat med focus. Vilka tal som finns och vad de gör
kan du läsa i Visual Basic´s hjälp-fil, sök på
"Shell".
Sökväg till ditt program
Genom att ta reda på sökvägen till ditt program så
kan du enkelt komma åt filer och dylikt. Skriv bara:
Private Sub Command1_Click()
MsgBox App.Path & "\" & App.EXEName & ".EXE"
End Sub
Notera att fil ändelsen inte följer med om vi inte lägger
till den manuellt.
Språk version på Windows 95
Att veta vilket språk som Windows använder sig av kan ibland
vara mycket användbart. För att det här exemplet ska fungera
behöver du ett formulär med en knapp som heter "Command1" och
en modul. I modulen deklarerar vi API funktioner som vi kommer att använda
oss av eller kan använda oss av. Skriv följande i modulen.
Public Declare Function GetLocaleInfo
Lib "kernel32" _
Alias "GetLocaleInfoA" (ByVal
Locale As Long, _
ByVal LCType As
Long, ByVal lpLCData As
String, _
ByValcchData As Long) As
Long
Public Declare Function GetLastError
Lib "kernel32" () As
Long
Public Const LOCALE_SYSTEM_DEFAULT
As Long = &H800
Public Const LOCALE_USER_DEFAULT As
Long = &H400
Public Const LOCALE_SENGCOUNTRY As
Long = &H1002
Public Const LOCALE_SABBREVCTRYNAME
As Long = &H7
Public Const ERROR_INSUFFICIENT_BUFFER
= 122
Public Const ERROR_INVALID_FLAGS =
1004&
Public Const ERROR_INVALID_PARAMETER
= 87
Sedan behöver vi koden som anropar API och tar reda på vilket
språk som används. Den koden skrivs i knappen som följande:
Private Sub Command1_Click()
Dim Buffer As
String, CountryName As String, RetVal
As Long
Buffer = String$(255, Chr$(0))
RetVal = GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, _
LOCALE_SABBREVCTRYNAME, Buffer, 255&)
CountryName = Left$(Buffer, RetVal)
MsgBox CountryName
End Sub
Prova nu och du kommer att få ett meddelande
med texten "SWE" om du använder en svensk version eller t.ex. "NOR"
eller "ENG" om du använder någon annan version. Det går
att tricksa till det lite med koden också. Om du byter ut "LOCALE_SYSTEM_DEFAULT"
mot "LOCALE_USER_DEFAULT" så får du den enskilde användarens
språk. Man kan också byta ut "LOCALE_SABBREVCTRYNAME" mot "LOCALE_SENGCOUNTRY"
så får du t.ex. svaret "Sweden" eller "Norway" istället
för "SWE" respektive "NOR". Källa: Visual Basic FORUM.
Alltid överst..
Det är inte så ofta som man måste ha ett fönster
i sitt program "alltid överst". Men när man behöver det
så är den här koden ovärderlig. Hela koden under ska
kopieras in i en modul.
Option Explicit
Declare Function SetWindowPos Lib
"user32" _
(ByVal hwnd As
Long, ByVal hWndInsertAfter As
Long, _
ByVal x As
Long, ByVal Y As
Long, ByVal cx As
Long, _
ByVal cy As
Long, ByVal wFlags As
Long) As Long
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
Public Const SWP_SHOWWINDOW = &H40
Public Const SWP_NOACTIVATE = &H10
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
Public Sub FormOnTop(Handle As
Integer, OnTop As Boolean)
Dim wFlags As
Long, PosFlag As Long
wFlags = SWP_NOMOVE Or
SWP_NOSIZE Or _
SWP_SHOWWINDOW Or
SWP_NOACTIVATE
Select Case OnTop
Case
True
PosFlag = HWND_TOPMOST
Case
False
PosFlag = HWND_NOTOPMOST
End Select
SetWindowPos Handle, PosFlag, 0, 0, 0, 0, wFlags
End Sub
Sedan måste du givetvis ha en kod som ställer ditt fönster
som "alltid överst" och det gör du med:
FormOnTop Form1.hwnd, True
Och för att ta bort "Alltid överst" så skriver du
givetvis:
FormOnTop Form1.hwnd, False
Ändra system menyn
På nästan varje fönster finns det en ikon uppe till
vänster. När man trycker på den så får man
fram en system meny. I Visual Basic kan man på ett ganska enkelt
sätt plocka bort saker ur den. Kopiera in nedanstående kod i
en modul.
Declare Function GetSystemMenu Lib
"user32" _
(ByVal hwnd As
Long, ByVal bRevert As
Long) As Long
Declare Function RemoveMenu Lib
"user32" _
(ByVal hMenu As
Long, ByVal nPosition As
Long, _
ByVal wFlags As
Long) As Long
Public Const MF_BYPOSITION = &H400&
Public Sub TakeCloseOff(Handle As
Long)
Dim SysMenHandle
As Long, RetVal As Long
SysMenHandle = GetSystemMenu(Handle, 0)
RetVal = RemoveMenu(SysMenHandle, 6, MF_BYPOSITION)
'Ta bort "Avsluta" (index
= 6).
RetVal = RemoveMenu(SysMenHandle, 5, MF_BYPOSITION)
'Ta bort separatorn som
nu ligger längst ned (index = 5).
End Sub
Skriv sedan in nedanstående kod i en knapp med namnet "Command1".
Om knappen heter något annat så måste du också
ändra namnet i koden.
Private Sub Command1_Click()
TakeCloseOff Command1.Parent.hwnd
End Sub
Som ni märkte så tog koden bort "Avsluta" och separatorn
i menyn. Varje objekt i menyn har ett index. Objektet längst upp har
index 0 och "Avsluta" har index 6.
Lista Typsnitt
Lista alla installerade typsnitt i Windows eller din skrivare. Skapa
en knapp med namnet "Command1" och en list ruta med namnet "List1". För
att lista Windows typsnitt skriver du följande kod i knappen:
Sub Command1_Click()
Dim x As Integer
For x = 0 To
Screen.FontCount - 1
List1.AddItem Screen.Fonts(x)
Next x
End Sub
Om du vill lista skrivarens typsnitt så byter du ut "Screen"
mot "Printer" på båda platserna.
Lista Skrivare
Du kan även lista vilka skrivare som finns installerade på
din dator genom att skriva koden som kommer. Börja med att skapa en
knapp med namnet "Command1" och en list ruta med namnet "List1". Skriv
sedan koden i knappen.
Sub Command1_Click()
List1.Clear
Dim prt As Printer
For Each prt In Printers
List1.AddItem prt.DeviceName
Next prt
End Sub
|