Categories
VB.NET Упътвания

Вграждане на dll в assembly

Примерен код на VB.Net

1. Добавяне на Event Handler преди извикване на ресурс от dll файла

AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf AssemblyResolve

2. Функция за извикване на dll файла

Private Function AssemblyResolve(ByVal sender As Object, ByVal e As ResolveEventArgs) As Assembly
Dim resourceFullName As String = String.Format("Seo.{0}.dll", e.Name.Split(","
  c)(0))
Dim thisAssembly As Assembly = Assembly.GetExecutingAssembly()
Using resource As Stream = thisAssembly.GetManifestResourceStream(resourceFullName)
If resource IsNot Nothing Then
Return Assembly.Load(ToBytes(resource))
End If
Return Nothing
End Using
End Function

Private Function ToBytes(ByVal instance As Stream) As Byte()
Dim capacity As Integer = If(instance.CanSeek, Convert.ToInt32(instance.Length), 0)

Using result As New MemoryStream(capacity)
Dim readLength As Integer
Dim buffer(4096) As Byte

Do
readLength = instance.Read(buffer, 0, buffer.Length)
result.Write(buffer, 0, readLength)
Loop While readLength > 0

Return result.ToArray()
End Using
End Function
Categories
VB.NET

Нова версия на Гаусова проекция

Новата версия на програмата за преобразуване от географски координати (географска ширина и географска дължина) в проекционни Гаусови координати можете да свалите от следната връзка Гаусова проекция v1.2.1

За да работи програмата изисква версия 4.0 на Microsoft .Net Framework.

Categories
VB.NET

Обновяване на Vbox7 Downloader

Програмата Vbox7 Downloader, предназначена за сваляне на видео файлове от сайта Vbox7.com, е обновена до версия 0.6, като е добавена нова функционалност:

  • възможност за директно отваряне на файловете от списъка със свалени файлове;

Можете да свалите последната версия на Vbox7 Downloader от тази връзка Vbox7 Downloader

Програмата изисква да имате инсталиран .Net Framework 4, за да работи.

Categories
VB.NET Упътвания

Показване на точки в MapWinGIS

' дефиниране на нов точков shp файл
Dim pointShapeFile As New Shapefile
If pointShapeFile.CreateNewWithShapeID(String.Empty, ShpfileType.SHP_POINT) = True Then
    ' начален индекс на обектите в shp файла
    shapeIndex = 0
    ' за всеки връх (vertex) от списъка с върхове се създава нов точков обект в shp файла
    For Each vertex As Vertex In triangulation.VerticesList
        ' дефиниране на нов точков обект
        point = New Point
        ' координатите на точката съвпадат с координатите на върха
        With point
            .x = vertex.X
            .y = vertex.Y
        End With
        ' дефиниране на нов shp обект
        shape = New Shape
        With shape
            ' дефиниране на нов точков обект
            .Create(ShpfileType.SHP_POINT)
            ' вмъкване на точков обект
            .InsertPoint(point, 0)
        End With
        ' вмъкване на shp обекта в shp файла
        pointShapeFile.EditInsertShape(shape, shapeIndex)
        ' увеличаване на индекса с единица
        shapeIndex += 1
    Next vertex
    ' дефиниране на настройките за изобразяване на точковия shp файл
    With pointShapeFile.DefaultDrawingOptions
        ' тип на условния знак за точка
     .SetDefaultPointSymbol(tkDefaultPointSymbol.dpsCircle)
        ' запълващ цвят на условния знак
        .FillColor = color.ColorByName(tkMapColor.Blue)
        ' размер на точката
        .PointSize = 10
    End With
    ' добавяне и показване на точковия слой върху картата
    With Map
        .AddLayer(pointShapeFile, True)
        .ZoomToMaxExtents()
    End With
Else
    Throw New Exception("Не може да създаде нов shape файл с точки!")
End If
Categories
VB.NET

Задача: Sand-glass

Описание

Имало едно време един могъщ магьосник. Неговото име било Гуеногфрин. Не след дълго той станал велик магьосник. Добросърдечен бил той. Използвал магията си единствено, за да защитава хората от злите вещици, идващи през нощта. Гуеногфрин, въпреки това, бил миролюбив и не искал да се бие или нарани вещиците, затова той измислил друго решение. Щял да хваща вещиците и да ги заключва в пясъчни часовници (единственият затвор, от който  вещица не може да избяга). За нещастие, пясъчните му часовници били на привършване. Помогни на Гуеногфрин да залови всички вещици като направиш свои собствени пясъчни часовници.

Пример

Sand-glass

Решение

Module SandGlass
Sub Main()
Dim n = Integer.Parse(Console.ReadLine())
Dim stars As Integer = n + 2
Dim add As Boolean = False
For i As Integer = 1 To n
If stars = 1 Then
add = True
End If
stars = If(add = False, stars - 2, stars + 2)
Dim dots As Integer = (n - stars) * 0.5
Console.Write(New String(".", dots))
Console.Write(New String("*", stars))
Console.Write(New String(".", dots))
Console.WriteLine()
Next i
Console.ReadLine()
End Sub
End Module
Categories
VB.NET

Задача: Fir Tree

Описание

Бъдни вечер наближава, така че дори и програмистите трябва да се подготвят.

В духа на празника твоята задача е да напишеш програма, която отпечатва елха в конзолата.

Форматът на дървото е показан в примера по-долу.

Пример

Fir Tree

Решение

Module FirTree
Sub main()
Dim height As Integer = Integer.Parse(Console.ReadLine())
Dim width As Integer = 1
For i As Integer = 2 To height - 1
width += 2
Next i
Dim asterisk As Integer = -1
Dim point As Integer = 0
For i = 1 To height
asterisk += 2
point = If(i < height, (width - asterisk) * 0.5, (width - 1) * 0.5)
For j = 1 To width
If j <= point Or j > width - point Then
Console.Write(".")
Else
Console.Write("*")
End If
Next j
Console.WriteLine()
Next i
Console.ReadLine()
End Sub
End Module
Categories
Без категория

Задача: Tribonacci

Описание

Редицата на Трибоначи е редица, в която всеки следващ елемент се получава от сумата на предходните три елемента на редицата.

Tn = Tn-1 + Tn-2 + Tn-3

Напишете програма, която намира n-тият елемент на редицата на Трибоначи, ако са дадени първите три елемента на редицата и номерът на n-тия елемент.

Първоначално решение

Module Tribonacci
Sub main()
Dim T1 As Integer = Integer.Parse(Console.ReadLine())
Dim T2 As Integer = Integer.Parse(Console.ReadLine())
Dim T3 As Integer = Integer.Parse(Console.ReadLine())
Dim N As Integer = Integer.Parse(Console.ReadLine())
Dim T(N - 1) As Integer
T(0) = T1
T(1) = T2
T(2) = T3
For i As Integer = 3 To N - 1
T(i) = T(i - 3) + T(i - 2) + T(i - 1)
Next i
Console.WriteLine(T(N - 1))
Console.ReadLine()
End Sub
End Module

Коментар

Това решение не е добро, защото N може да е число от 1 до 15000 включително, а T1, T2 и T3 – числа от -2000000 до 2000000. В решението масивът T се запълва с всички елементи на редицата.

Ново решение

Module Tribonacci
Sub main()
Dim T1 As Integer = Integer.Parse(Console.ReadLine())
Dim T2 As Integer = Integer.Parse(Console.ReadLine())
Dim T3 As Integer = Integer.Parse(Console.ReadLine())
Dim N As Integer = Integer.Parse(Console.ReadLine())
Dim i As Integer = 4
Dim nextMember As Integer = 0
While i <= N
nextMember = T1 + T2 + T3
T1 = T2
T2 = T3
T3 = nextMember
i += 1
End While
Console.WriteLine(nextMember)
Console.ReadLine()
End Sub
End Module

Коментар

В това решение последните три члена на редицата се пазят в променливите T1, T2 и Т3. Масиви не се използват.

Categories
VB.NET

Задача: Ship Damage

Описание

За дефинирането на диагонала не е от значение реда на въвеждане на двете срещуположни точки, както и самите точки.

Визуализация

Ship Damage

Решение

Imports System.Drawing
Module ShipDamage
Sub Main()
' вход на данни
Dim line(10) As Integer
For i As Integer = 0 To line.Length - 1
line(i) = Integer.Parse(Console.ReadLine())
Next i
' дефиниране на правоъгълник,
' с начало долен ляв ъгъл (1) и посока обратна на часовниковата стрелка,
' зададен чрез един от диагоналите му
Dim S(3) As Point 'масив за точките, дефиниращи върховете на правоъгълника
If line(2) - line(0) > 0 And line(3) - line(1) > 0 Then
'диагоналът е зададен с точки 1-3
S(0) = New Point(line(0), line(1))
S(1) = New Point(line(2), line(1))
S(2) = New Point(line(2), line(3))
S(3) = New Point(line(0), line(3))
ElseIf line(2) - line(0) > 0 And line(3) - line(1) < 0 Then 'диагоналът е зададен с точки 2-4 S(0) = New Point(line(2), line(1)) S(1) = New Point(line(0), line(1)) S(2) = New Point(line(0), line(3)) S(3) = New Point(line(2), line(3)) ElseIf line(2) - line(0) < 0 And line(3) - line(1) > 0 Then
'диагоналът е зададен с точки 4-2
S(0) = New Point(line(0), line(3))
S(1) = New Point(line(2), line(3))
S(2) = New Point(line(2), line(1))
S(3) = New Point(line(0), line(1))
Else
'диагоналът е зададен с точки 3-1
S(0) = New Point(line(2), line(3))
S(1) = New Point(line(0), line(3))
S(2) = New Point(line(0), line(1))
S(3) = New Point(line(2), line(1))
End If
'дефиниране на катапулти
Dim C(2) As Point 'масив за точките, дефиниращи катапултите
C(0) = New Point(line(5), line(6))
C(1) = New Point(line(7), line(8))
C(2) = New Point(line(9), line(10))
'дефиниране на хоризонта
Dim horizon As Integer = line(4)
'щети, нанесени по кораба от катапултите
Dim totalDmg As Integer = 0
'превъртане на всички катапулти
For i As Integer = 0 To C.Length - 1
'разстояние от катапулта до хоризонта
Dim dist = horizon - C(i).Y
'координати на точката, дефинираща мишената
Dim target = New Point(C(i).X, dist + horizon)
'брояч за положителните детерминанти
Dim positiveDeterminant As Integer = 0
'флаг за пропуск при отрицателна детерминанта
Dim miss As Boolean = False
'превъртане върховете на кораба
For j As Integer = 0 To S.Length - 1
'определяне на "площта" (детерминантата)
Dim area As Integer
If j < S.Length - 1 Then
area = (0.5) * (S(j + 1).X * target.Y - S(j + 1).Y * target.X - S(j).X * target.Y + S(j).Y * target.X + S(j).X * S(j + 1).Y - S(j).Y * S(j + 1).X)
Else
area = (0.5) * (S(0).X * target.Y - S(0).Y * target.X - S(j).X * target.Y + S(j).Y * target.X + S(j).X * S(0).Y - S(j).Y * S(0).X)
End If
'проверяване знака на "площта" (детерминантата)
Select Case area Case Is > 0 'положителна "площ"
'целта е улучена при 2 <= positiveDeterminant <= 4 positiveDeterminant += 1
Case Is < 0 'отрицателна "площ"
'целта е пропусната
miss = True
Exit For
End Select
Next j
'ако няма пропуск, прибавяме щетите, нанесени по кораба, към общите щети
If miss = False Then
Select Case positiveDeterminant
Case 4 'изстрелът попада в кораба
totalDmg += 100
Case 3 'изстрелът попада върху един от ръбовете
totalDmg += 50
Case 2 'изстрелът попада върху един от върховете
totalDmg += 25
End Select
End If
Next i
'извеждане на резултата
Console.WriteLine(String.Format(totalDmg))
End Sub
End Module
Categories
VB.NET

Информация за процесор

Взимане на информация за процесор във Visual Basic чрез класа Win32_Processor.

Информацията се показва в DataGridView с име CPUInfo.

Imports System.Management
Public Class Main
Private Sub appLoad(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
With CPUInfo
.Columns.Add("Name", "Name")
.Columns.Add("Value", "Value")
End With
Dim search As New ManagementObjectSearcher("SELECT * FROM Win32_Processor")
Dim result As ManagementObjectCollection = search.Get()
For Each item As ManagementObject In result
For Each data As PropertyData In item.Properties
CPUInfo.Rows.Add(data.Name, data.Value)
Next data
Next item
End Sub
End Class
view raw Main.vb hosted with ❤ by GitHub
Categories
VB.NET

Четене на файл във Visual Basic

Четене на файлове във VB.NET чрез използване на StreamReader класа.

Dim fileName As String = "файл.txt"
Using reader As StreamReader = New StreamReader(fileName, Encoding.UTF8)
While Not reader.EndOfStream
'ред
Dim line() As String = Split(reader.ReadLine, " ")
'действие
End While
End Using
view raw File.vb hosted with ❤ by GitHub