19,416
edits
Paradox-01 (talk | contribs) m (toying around with registry ... file associations look promising) |
m (link fix; pretty sure this is what's being referred to) |
||
(6 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
This page serves as a brief documentation of VB.net with a focus on Oni-related aspects. | |||
This page serves as a brief VB.net | |||
==Projects== | |||
* [http://mods.oni2.net/node/332 Simple OniSplit GUI] | |||
* [ | |||
* [[TRAM setup assistant]] | * [[TRAM setup assistant]] | ||
==Basic knowledge== | |||
: Q: How can I use functions from another class? | : Q: How can I use functions from another class? | ||
: A: '''First condition:''' The function must be a "Shared" one. For example "Shared Function GetApp()". '''Second condition:''' in the ''target code'', the class must be written beforehand (for example "Oni.GetApp" whereby "Oni" is the ''source class's'' name). | : A: '''First condition:''' The function must be a "Shared" one. For example "Shared Function GetApp()". '''Second condition:''' in the ''target code'', the class must be written beforehand (for example "Oni.GetApp" whereby "Oni" is the ''source class's'' name). | ||
====Registry | |||
===Command-line functions within a forms application=== | |||
Since you have to watch out for multiple events, the argument processing should happen in a separate function so the code can be easily re-used. | |||
' Form1.vb (main form) | |||
Public Function processArgs(ByVal args() As String) | |||
For Each a In args | |||
MsgBox(a) | |||
Next | |||
End Function | |||
; Catch arguments from form load event | |||
' Form1.vb (main form) | |||
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load | |||
If My.Application.CommandLineArgs.Count > 0 Then | |||
processArgs(My.Application.CommandLineArgs.ToArray) | |||
End If | |||
' [...] | |||
end sub | |||
; Catch arguments when a single-instance application is already running | |||
The load event can't be triggered if the application can't be opened more than once at a time. This is named a "single-instance application" and will trigger an StartupNextInstance event. Read [https://stackoverflow.com/questions/28831765/pass-command-line-to-first-instance-of-a-single-instance-app here] for details. | |||
'ApplicationEvents.vb | |||
Imports Microsoft.VisualBasic.ApplicationServices | |||
Namespace My | |||
Partial Friend Class MyApplication | |||
Private Sub MyApplication_StartupNextInstance(sender As Object, e As StartupNextInstanceEventArgs) Handles Me.StartupNextInstance | |||
Dim f = Application.MainForm | |||
If f.GetType Is GetType(Form1) Then | |||
CType(f, Form1).processArgs(e.CommandLine.ToArray) | |||
End If | |||
End Sub | |||
End Class | |||
End Namespace | |||
===Registry=== | |||
Data in '''HKEY_CLASSES_ROOT''' can only be changed by admins. | Data in '''HKEY_CLASSES_ROOT''' can only be changed by admins. | ||
Line 23: | Line 69: | ||
Since .bsl in an unique suffix it would be enough to set 2 nodes: | Since .bsl in an unique suffix it would be enough to set 2 nodes: | ||
SOFTWARE\Classes\bsl_auto_file\shell\edit\command, ""(leave value name empty), (path to bsl editor), RegistryValueKind.String | SOFTWARE\Classes\bsl_auto_file\shell\edit\command, ""(leave value name empty), (path to bsl editor plus file as argument), RegistryValueKind.String | ||
SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bsl\OpenWithProgids, bsl_auto_file, New Byte() {}, RegistryValueKind.None | SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bsl\OpenWithProgids, bsl_auto_file, New Byte() {}, RegistryValueKind.None | ||
Line 33: | Line 79: | ||
===Code snippets | ==Code snippets== | ||
===Registry=== | |||
; Check if key exists | |||
Private Function getXsiFromRegistry() As String() | |||
Dim oRegKey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\\Softimage\\SOFTIMAGE Application") | |||
Dim XsiPathInReg As String = "" | |||
If oRegKey Is Nothing Then | |||
XsiPathInReg = "" | |||
Else | |||
Dim Arr = oRegKey.GetSubKeyNames | |||
For Each n In Arr | |||
If InStr(n, "Softimage_Mod_Tool_7.5|Application|bin") > 0 Then | |||
XsiPathInReg = Replace(n, "|", "\") | |||
If Directory.Exists(XsiPathInReg) = False Then | |||
XsiPathInReg = "" | |||
End If | |||
End If | |||
Next | |||
oRegKey.Close() | |||
End If | |||
If XsiPathInReg = "" Then | |||
Return New String() {"", "notvalid"} | |||
Else | |||
Return New String() {XsiPathInReg, "valid"} | |||
End If | |||
End Function | |||
If getXsiFromRegistry(1) = "valid" Then | |||
MsgBox(getXsiFromRegistry(0)) | |||
End If | |||
: example of a valid, returned path: C:\Softimage\Softimage_Mod_Tool_7.5\Application\bin | |||
==Code snippets (old)== | |||
Common functions that are shared among VB.net projects should have their own class. | Common functions that are shared among VB.net projects should have their own class. | ||
Line 39: | Line 121: | ||
===Oni Class=== | |||
Functions in this class: | Functions in this class: | ||
Line 152: | Line 234: | ||
===Drag and drop=== | |||
The target element must have its "AllowDrop" property set to "true". | The target element must have its "AllowDrop" property set to "true". | ||
Line 180: | Line 262: | ||
[[Category: | [[Category:Modding tutorials]] |