Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/102: Рейтинг темы: голосов - 102, средняя оценка - 4.86
Модератор
Эксперт .NET
 Аватар для Yury Komar
4371 / 3441 / 512
Регистрация: 27.01.2014
Сообщений: 6,264

Готовые решения и полезные коды на Visual Basic .NET (Часть-2)

26.08.2021, 13:11. Показов 27817. Ответов 43

Студворк — интернет-сервис помощи студентам
Данная тема является продолжение одноимённой темы
Готовые решения и полезные коды на Visual Basic .NET (Часть-1)

Предлагаю в этой теме размещать ответы на часто задаваемые вопросы и просто делиться полезными кодами.

Для исходников есть отдельная тема и они будут либо удаляться из этой темы, либо переноситься в соответствующую тему)

Обращаю внимание на некоторые моменты, которые являются дополнением к основным правилам
  1. Запрещается копировать материалы с других сайтов или форумов
  2. Решения должны быть написаны с использованием языка Visual Basic .NET
  3. Запрещено создавать посты с уточнениями и замечаниями. Такие вопросы задавайте на форуме
  4. Код, в котором присутствуют комментарии, читается и понимается намного легче и быстрее
  5. Длинные коды и объемные вопросы одного содержания заключайте в теги [SPОILER]Большой код[/SPОILER]
  6. При создании поста убедитесь, что этот вопрос не был освещен ранее, так же он отсутствует в первой части данной темы
  7. Код должен быть написан грамотно, большие и неэффективные коды будут удаляться
  8. Список вопросов по конкретной теме нельзя "разрывать" на 2 и более поста

Просьба не спешите постить решения "сгоряча", тщательно обдумайте список вопросов, их тематику и порядок.

Перед загрузкой архива на форума настоятельно рекомендуется выполнить шаги по уменьшению его размера:
  1. Удалить из архива служебные папки IDE такие как: .vs, .vscode, .idea;
  2. Удалить из архива папку .git, если вы пользуетесь системой контроля версий;
  3. Удалить из архива папку obj.

Если вы найдете информацию, которой можно было бы дополнить ваши предыдущие сообщения, что-то изменить или перегруппировать, пишите модераторам в л/с.

 Комментарий модератора 
Данные правила обязательны к исполнению в рамках темы
Примечание: Некоторые коды приведены без учета строгой типизации (Параметр Strict), поэтому для их использования необходимо выполнить приведение типов.
2
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.08.2021, 13:11
Ответы с готовыми решениями:

Готовые решения и полезные коды на Visual Basic .NET (Часть-1)
Предлагаю в этой теме размещать ответы на часто задаваемые вопросы и просто делиться полезными...

Обсуждение кода из темы "Готовые решения и полезные коды": Функция MeTka
Всем привет. Цель данной темы обсудить код функции MeTka. В первую очередь скажу что моей целью...

Обсуждение "Суммы чисел" из темы "Готовые рещения и полезные коды"
Тема создана для обсуждения кода "Сумма чисел". У меня есть ряд вопросов по коду от Zhivoder....

43
Модератор
Эксперт .NET
 Аватар для Yury Komar
4371 / 3441 / 512
Регистрация: 27.01.2014
Сообщений: 6,264
19.06.2023, 17:57  [ТС]
Студворк — интернет-сервис помощи студентам
Варианты проверки наличия Интернет соединения.

В общем, перебрал я кучу способов того, как определить наличие подключения к интернет и остановился на варианте #2, которое действительно быстро и точно говорит о состоянии подключение к интернет (именно доступное подключение).

Ping иной раз возвращает неверное состояние, ввиду того, что фактически интернет присутствует на компе, но компанейский firewall успешно блокирует все то, что не разрешено... Google кстати пингуется, но все остальное нИзЯ...

Вариант #1
Добавить ссылку на COM сборку Network List Manager 1.0 Type Library далее использовать этот код для проверки подключения к интернет.
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
Imports NETWORKLIST
Public Class InternetConnectionChecker_UsingCOM
    Private ReadOnly Networ_kList_Manager As INetworkListManager
 
    Public Sub New()
        Networ_kList_Manager = New NetworkListManager()
    End Sub
 
    Public Function IsConnected() As Boolean
        Return Networ_kList_Manager.IsConnectedToInternet
    End Function
End Class


Вариант #2 - я остановился на этом варианте
То же, что и вариант-1, но поздним связыванием, т.е. не добавляя ссылку на COM сборку Network List Manager 1.0 Type Library, а ссылаться на нее в рантайме.
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
    Public Function IsInternetAvailable_UsingCOM() As Boolean
        Try
            Dim networkListManager As Object = Activator.CreateInstance(Type.GetTypeFromCLSID(New Guid("{DCB00C01-570F-4A9B-8D69-199FDBA5723B}")))
            Dim InternectConnectuinStatus As Boolean = CBool(networkListManager.IsConnectedToInternet)
            networkListManager = Nothing
            GC.Collect()
            Return InternectConnectuinStatus
        Catch ex As Exception
            Return False
        End Try
    End Function


Вариант #3
PING, конечно же, ведь с его помощью можно проверить соединение с интересующим нас ресурсом, не обязательно имея подключение к интернет, это может быть и локальная сеть.
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    Private Function IsInternetAvailable_UsingPING() As Boolean
        Try
            Using myPing As Ping = New Ping()
                Dim host As String = "sea-soft.ru"
                'Dim host As String = "google.com"
                Dim buffer As Byte() = New Byte(31) {}
                Dim timeout As Integer = 1000
                Dim pingOptions As PingOptions = New PingOptions()
                Dim reply As PingReply = myPing.Send(host, timeout, buffer, pingOptions)
                Return (reply.Status = IPStatus.Success)
            End Using
        Catch ex As Exception
            Return False
        End Try
    End Function


Вариант #4
Проверка получение ответа от Microsoft NCSI, тоже не помог в мое случае, да и долго шла проверка, в отличии от варианта-2, где функция возвращает True или False в течении 1 секунды.
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
'Check if the response of http://www.msftncsi.com/ncsi.txt is Microsoft NCSI.
'If not, check if the IP of dns.msftncsi.com is 131.107.255.255.
Public Shared Function IsInternetAvailable() As Boolean
    Try
        Dim ncsi As String = New WebClient().DownloadString("http://www.msftncsi.com/ncsi.txt")
        If ncsi = "Microsoft NCSI" Then Return True
    Catch : End Try
 
    Try
        Dim iphost As IPHostEntry = Dns.GetHostEntry("dns.msftncsi.com")
        If iphost IsNot Nothing Then
            For Each item In iphost.AddressList
                If item.ToString() = "131.107.255.255" Then Return True
            Next
        End If
    Catch : End Try
 
    Return False
End Function


Вариант #5
Попытаться открыть\прочесть страничку сайта
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
Public Shared Function CheckForInternetConnection() As Boolean
    Try
        Using client = New WebClient()
            Using stream = client.OpenRead("www.google.com")
                Return True
            End Using
        End Using
    Catch
        Return False
    End Try
End Function


Вариант #6
Используя WinAPI
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
    <DllImport("wininet.dll")> _
    Private Shared Function InternetGetConnectedState(ByRef Description As Integer, ByVal ReservedValue As Integer) As Boolean
    End Function
 
    Private Shared Function IsInternetAvailable() As Boolean
        Try
            Dim ConnDesc As Integer
            Dim conn As Boolean = InternetGetConnectedState(ConnDesc, 0)
            Return conn
        Catch
            Return False
        End Try
    End Function


Вариант #7
Проверка DNS Хоста? тоже что и применялось в варианте-4, но без перебора IP адресов
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
    Private Shared Function IsInternetAvailableByDns() As Boolean
        Try
            Dim iheObj As IPHostEntry = Dns.GetHostEntry("www.google.com")
            Return True
        Catch
            Return False
        End Try
    End Function


Вариант #8
Проверка наличия соединения "с сетью". Данный способ мне не помог совсем, так как он возвращал состояние соединения именно с сетью, не только с интернет (наличие локальной сети, без подлючения к интернет, для него тоже является сеть).
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
If My.Computer.Network.IsAvailable = True Then
    'Do Something
End If



Ну и пожалуй всё. Если у кого-то есть иные методы проверки наличия подключения к интернет, скиньте, обновлю пост.
Повторюсь, я остановился на варианте-2, так как он оказался, в моем случае, идеальным и быстрым.
Можно конечно комбинировать все эти способы, но отсюда может, и не может, а точно, существенно увеличится время сего действа.
6
73 / 69 / 5
Регистрация: 11.04.2021
Сообщений: 299
Записей в блоге: 7
18.09.2023, 00:39
Две небольшие функции позволяющие выудить имя домена из мыла или ссылки.


VB.NET
1
2
3
4
5
6
7
8
9
10
    Private Function GetDomainNameFromEmail(email As String)
        Dim a = email.Split("@".ToCharArray).Last()
        Return a.Substring(a.LastIndexOf(".", a.LastIndexOf(".") - 1) + 1)
    End Function
 
 
    Private Function GetDomainNameFromUrl(url As String)
        Dim a = New Uri(url).Host
        Return a.Substring(a.LastIndexOf(".", a.LastIndexOf(".") - 1) + 1)
    End Function
VB.NET
1
2
3
        MsgBox(GetDomainNameFromEmail("admin@cyberforum.ru"))
 
        MsgBox(GetDomainNameFromUrl("https://www.cyberforum.ru/vb-net/thread2867779-page2.html#post17040016"))
0
73 / 69 / 5
Регистрация: 11.04.2021
Сообщений: 299
Записей в блоге: 7
20.09.2023, 13:43
Опять таки небольшая функция которая находит число совпадений в строке, параметр "matchcase" определяет учёт регистра

VB.NET
1
2
3
    Private Function Hits(findin As String, findwhat As String, Optional matchcase As Boolean = False)
        If Not matchcase Then Return findin.ToLower.Split(New String() {findwhat.ToLower}, StringSplitOptions.None).Count() - 1 Else Return findin.Split(New String() {findwhat}, StringSplitOptions.None).Count() - 1
    End Function
Пример

VB.NET
1
2
3
        Dim a = "Extension methods have all the capabilities of regular static Methods."
        MsgBox("совпадений  " & Hits(a, "methods") ) ' без учёта регистра
        MsgBox("совпадений  " & Hits(a, "methods",True) ) ' с учётом регистра
1
34 / 30 / 3
Регистрация: 16.12.2019
Сообщений: 110
04.10.2023, 10:10
Искал в интернете решение своей проблемы и не нашел, как перевести файл Excel в PDF без дополнительных библиотек, лишь с установленным acrobat reader-ом.
Пробовал через SaveAs('имя файла', FileFormat:= 'формат'), но там отсутствует формат xlPDF

Делюсь тем, что узнал:

VB.NET
1
Public Excelbook As Microsoft.Office.Interop.Excel.Workbook

VB.NET
1
Excelbook.ExportAsFixedFormat(Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF, IO.Path.GetFileNameWithoutExtension(filename))
где:
filename - переменная хранящая в себе путь с именем файла.

Надеюсь кому-то помог
3
Модератор
Эксперт .NET
 Аватар для Yury Komar
4371 / 3441 / 512
Регистрация: 27.01.2014
Сообщений: 6,264
13.03.2024, 10:18  [ТС]
Создать PDF документ из изображения (картинки Bitmap), без использования сторонних библиотек


Код не мой, но можно его улучшать и улучшать, добавив подгонку под нужный ppi, так же добавить сохранение соотношени сторон картинки, сжатие изображения, для уменьшения размера выходного PDF и т.д.. Но это уже сами.

Делюсь именно самой идеей того, как поместить картинку в PDF без использования сторонних библиотек, так как не требуется ничего дополнительного устанавливать.

Можно применять там, где делаете сканы и нужно сохранить их в PDF...
Функция CreatePDF возвращает путь к сохраненному файлу PDF, но и это можно изменить по вашему усмотрению.


Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
Imports System.IO
Imports System.Text
 
Public Class CreatePDF
    Private out As System.IO.FileStream
    Private Sub WriStr(s As String)
        out.Write(System.Text.Encoding.ASCII.GetBytes(s), 0, s.Length)
    End Sub
    
    Public Function CreatePdf(bmp As Bitmap)
        On Error Resume Next
        Dim strPath As String = FileSystem.CurDir
        Dim sDir As String = FileSystem.Dir(FileSystem.CurDir & "\Pdf", FileAttribute.Directory)
        If sDir = "" Then
            FileSystem.MkDir(FileSystem.CurDir & "\Pdf")
        End If
        sDir = FileSystem.CurDir & "\Pdf"
        Dim OutPdf As String = sDir + "\OutFile" & CStr(Date.Now.Hour) & CStr(Date.Now.Minute) & CStr(Date.Now.Second) & ".pdf"
        Dim strFileName As String = sDir + "\OutIma" & CStr(Date.Now.Hour) & CStr(Date.Now.Minute) & CStr(Date.Now.Second) & ".jpeg"
        Dim w As Integer = bmp.Width
        Dim h As Integer = bmp.Height
        Dim wf As String = CStr(w * 72) / bmp.HorizontalResolution
        Dim hf As String = CStr(h * 72) / bmp.VerticalResolution
        For Each deleteFile In Directory.GetFiles(sDir, "*.jpeg", SearchOption.TopDirectoryOnly)
            File.Delete(deleteFile)
        Next
        For Each deleteFile In Directory.GetFiles(sDir, "*.pdf", SearchOption.TopDirectoryOnly)
            File.Delete(deleteFile)
        Next
        File.Delete(OutPdf)
        bmp.Save(strFileName, System.Drawing.Imaging.ImageFormat.Jpeg)
        wf = wf.Replace(",", ".")
        hf = hf.Replace(",", ".")
        out = File.Create(OutPdf)
        Dim lens As New ArrayList()
        WriStr("%PDF-1.5" + vbCrLf)
        lens.Add(out.Position)
        WriStr(CStr(lens.Count) + " 0 obj " + "<</Type /Catalog" + vbCrLf + "/Pages 2 0 R>>" + vbCrLf + "endobj" + vbCrLf)
        lens.Add(out.Position)
        WriStr(CStr(lens.Count) + " 0 obj " + "<</Count 1/Kids [ <<" + vbCrLf + "" +
                     "/Type /Page" + vbCrLf + "" +
                     "/Parent 2 0 R" + vbCrLf + "" +
                     "/MediaBox [0 0 " + wf + " " + hf + "]" + vbCrLf + "" +
                     "/Resources<<  /ProcSet [/PDF /ImageC]" + vbCrLf + " /XObject <</Im1 4 0 R >>  >>" + vbCrLf + "" +
                     "/Contents 3 0 R" + vbCrLf + "" +
                     ">>" + vbCrLf + " ]" + vbCrLf + "" +
                     ">>" + vbCrLf + "endobj" + vbCrLf + "")
 
        Dim X As String = "" + vbCrLf + "" +
                "q" + vbCrLf + "" +
                "" + wf + " 0 0 " + hf + " 0 0 cm" + vbCrLf + "" +
                "/Im1 Do" + vbCrLf + "" +
                "Q" + vbCrLf + ""
        lens.Add(out.Position)
 
        WriStr(CStr(lens.Count) + " 0 obj " + "<</Length " + CStr(X.Length) + ">>" +
                        "stream" + X + "endstream" + vbCrLf + "" +
                        "endobj" + vbCrLf + "")
        lens.Add(out.Position)
 
        WriStr(CStr(lens.Count) + " 0 obj " + "<</Name /Im1" +
                        "/Type /XObject" + vbCrLf + "" +
                        "/Subtype /Image" + vbCrLf + "" +
                        "/Width " + w.ToString() +
                        "/Height " + h.ToString() +
                        "/Length 5 0 R" + vbCrLf + "" +
                        "/Filter /DCTDecode" + vbCrLf + "" +
                        "/ColorSpace /DeviceRGB" + vbCrLf + "" +
                        "/BitsPerComponent 8" + vbCrLf + "" +
                        ">> stream" + vbCrLf + "")
 
 
        Dim Siz As Long = out.Position
        Dim bufferSize As Integer = 1024
        Dim inputFile = IO.File.Open(strFileName, IO.FileMode.Open)
        Dim bytes = New Byte(bufferSize - 1) {}
 
        While inputFile.Read(bytes, 0, bufferSize) > 0
            out.Write(bytes, 0, bufferSize)
        End While
        Siz = out.Position - Siz
 
        WriStr("" + vbCrLf + "endstream" + vbCrLf + "" + "endobj" + vbCrLf + "")
        lens.Add(out.Position)
        WriStr(CStr(lens.Count) + " 0 obj " + Siz.ToString() + " endobj" + vbCrLf + "")
        Dim startxref As Long = out.Position
        WriStr("xref" + vbCrLf + "" + "0 " + (lens.Count + 1).ToString() + "" + vbCrLf + "" + "0000000000 65535 f" + vbCrLf + "")
        For Each L In lens
            WriStr((10000000000 + L).ToString().Substring(1) + " 00000 n" + vbCrLf + "")
        Next
 
        WriStr("trailer" + vbCrLf + "" + "<<" + vbCrLf + "" +
                    "  /Size " + (lens.Count + 1).ToString() + "" + vbCrLf + "" +
                    "  /Root 1 0 R" + vbCrLf + "" +
                    ">>" + vbCrLf + "" + "startxref" + vbCrLf + "" + startxref.ToString() + "" + vbCrLf + "%%EOF")
        out.Close()
 
        Return OutPdf
    End Function
 
End Class


Вариант применения:
VB.NET
1
2
3
4
5
6
Using OFD As New OpenFileDialogue
Dim bmp = 'Тут наша картинка
Dim cPDF As New CreatePDF
Process.Start(cPDF.CreatePDF(bmp))
cPDF = Nothing
End Using
5
Модератор
Эксперт .NET
 Аватар для Yury Komar
4371 / 3441 / 512
Регистрация: 27.01.2014
Сообщений: 6,264
08.04.2024, 17:30  [ТС]
Получить текст из StatusBar стороннего окна.

Вариант-1 - напрямую читать кол-во элементов в баре и по индексу тянуть текст лэйбы.
Данный подход получит текст даже если окно не в фокусе или даже свернуто.
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Public Class Form1
    Const WM_GETTEXT = &HD
    Const WM_USER = &H400
    Const SB_GETTEXTW = WM_USER + 13
    Const SB_GETTEXTLENGTHW = WM_USER + 12
    Const PROCESS_ALL_ACCESS = 2035711
    Const SB_GETPARTS = WM_USER + 6
    Const MEM_COMMIT = &H1000
    Const MEM_RELEASE = &H8000
    Const PAGE_READWRITE = &H4
 
    Declare Unicode Function SendMessage Lib "user32.dll" Alias "SendMessageW" (ByVal hwnd As IntPtr, ByVal msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
    Declare Unicode Function GetWindowThreadProcessId Lib "user32.dll" Alias "GetWindowThreadProcessId" (ByVal hwnd As IntPtr, ByRef ProcessId As UInt32) As UInt32
 
    Declare Unicode Function CloseHandle Lib "kernel32.dll" Alias "CloseHandle" (ByVal hProcess As IntPtr) As Integer
    Declare Unicode Function OpenProcess Lib "kernel32.dll" Alias "OpenProcess" (ByVal dwDesiredAccess As UInt32, ByVal bInheritHandle As UInt32, ByVal dwProcessId As UInt32) As IntPtr
    Declare Unicode Function VirtualAllocEx Lib "kernel32.dll" Alias "VirtualAllocEx" (ByVal hProcess As IntPtr, ByVal lpAddress As IntPtr, ByVal dwSize As IntPtr, ByVal flAllocationType As UInt32, ByVal flProtect As UInt32) As IntPtr
    Declare Unicode Function VirtualFreeEx Lib "kernel32.dll" Alias "VirtualFreeEx" (ByVal hProcess As IntPtr, ByVal lpAddress As IntPtr, ByVal dwSize As IntPtr, ByVal flProtect As UInt32) As IntPtr
    Declare Unicode Function ReadProcessMemory Lib "kernel32.dll" Alias "ReadProcessMemory" (ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, ByVal lpBuffer As System.Text.StringBuilder, ByVal nSize As IntPtr, ByRef lpNumberOfBytesRead As IntPtr) As Integer
 
    Function getStatusLabelText(Hwnd_StatusBar As IntPtr, LabelIndex As IntPtr) As String
        ' Заменить на hwnd своей строки состояния
        Dim ProcessId As UInt32
        Dim ThreadId As UInt32 = GetWindowThreadProcessId(Hwnd_StatusBar, ProcessId)
        Dim ProcessHandle As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, ProcessId)
 
        If ProcessHandle <> 0 Then
 
            'Dim StatusBarParts As Integer = SendMessage(hwndStatus, SB_GETPARTS, 0, 0)
            Dim textLength As Integer = SendMessage(Hwnd_StatusBar, SB_GETTEXTLENGTHW, LabelIndex, 0)
 
            If textLength Then
 
                Dim cbBytes As Integer = 2 * (textLength + 1)
                Dim lpRemoteBuff As IntPtr = VirtualAllocEx(ProcessHandle, 0, cbBytes, MEM_COMMIT, PAGE_READWRITE)
 
                If lpRemoteBuff <> 0 Then
 
                    SendMessage(Hwnd_StatusBar, SB_GETTEXTW, LabelIndex, lpRemoteBuff)
 
                    Dim lpLocalBuf As New System.Text.StringBuilder(textLength + 1)
                    Dim Readed As IntPtr
                    Dim resRead As Integer = ReadProcessMemory(ProcessHandle, lpRemoteBuff, lpLocalBuf, cbBytes, Readed)
 
                    VirtualFreeEx(ProcessHandle, lpRemoteBuff, 0, MEM_RELEASE)
                    CloseHandle(ProcessHandle)
 
                    If resRead Then Return lpLocalBuf.ToString
                End If
            End If
        End If
 
        Return String.Empty
    End Function
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        MsgBox(getStatusLabelText(TextBox1.Text, NumericUpDown1.Value))
    End Sub
End Class



Вариант-2 - используя IAccessible, как это делают скринридеры, получить текст любого элемента на экране
В данном случае, мы получаем хэндл нужной нам StatusBar, заием получаем RECT этого элемента управления и добавляем офсет в пикселях до нужной нам лэйбы с текстом.
Данный подход сможет получить текст только если элемент, из которого мы тянем текст, не перекрыто ничем другим, тоесть с видимой части экрана, что накладывает соответствующие ограничения на использование.
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Imports Accessibility
 
Public Class Form1
    Structure Pointapi
        Public x As Int32
        Public y As Int32
    End Structure
 
    Public Structure RECT
        Dim Left As Integer
        Dim Top As Integer
        Dim Right As Integer
        Dim Bottom As Integer
    End Structure
 
    Declare Unicode Function AccessibleObjectFromPoint Lib "oleacc.dll" Alias "AccessibleObjectFromPoint" (ByVal ptScreen As Pointapi, ByRef ppvObject As IAccessible, ByRef pvarChild As Object) As Integer
    Public Declare Function GetWindowRect Lib "user32.DLL" (ByVal hwnd As IntPtr, ByRef lpRect As RECT) As Integer
 
    Function getStatusLabelText(Hwnd_Status As IntPtr, Offset_X As Integer, Offset_Y As Integer) As String
        Dim sRECT As RECT
        GetWindowRect(Hwnd_Status, sRECT)
 
        Dim pt As Pointapi
        pt.x = sRECT.Left + CInt(Offset_X)
        pt.y = sRECT.Top + CInt(Offset_Y)
 
        Dim obj As Object = Nothing
        Dim acc As IAccessible = Nothing
        Dim res As Integer = AccessibleObjectFromPoint(pt, acc, obj)
 
        If res = 0 Then
            Return acc.accName(obj)
        End If
 
        Return String.Empty
    End Function
 
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ReturnText.Text = getStatusLabelText(HwndText.Text, offset_X.Text, offset_Y.Text)
    End Sub
End Class

5
73 / 69 / 5
Регистрация: 11.04.2021
Сообщений: 299
Записей в блоге: 7
30.05.2024, 22:57
Функция MeTka которая поможет вставить в строку через определённое кол. символов всё что угодно

VB.NET
1
MsgBox("12345678908".MeTka(3, ".", [From].Right))
VB.NET
1
MsgBox("12345678908".MeTka(2, "/"))
vbNewLine

VB.NET
1
MsgBox("12345678908".MeTka(2, vbNewLine))
VB.NET
1
textbox1.text=textbox1.text.MeTka(2, vbNewLine)
Поэкспериментируйте, надеюсь что эта функция облегчит кому то работу

 Комментарий модератора 
Обсуждение решения
Вложения
Тип файла: 7z Extensions.7z (1,005 байт, 33 просмотров)
2
 Аватар для Mikle Quits
787 / 308 / 17
Регистрация: 21.01.2023
Сообщений: 531
11.06.2024, 11:11
SR2D. Софтверный движок для работы со спрайтами.


Вот инструмент, который я написал достаточно давно, но очень часто им пользуюсь. Изначально движок разработан под VB6, но позже я написал порты под VB.NET и C#.
SR2D работает с 32-битными ARGB спрайтами, умеет загружать их и сохранять в файлы, манипулировать с ними, отображать друг на друга (с эффектами) и на форму (или контролы с hDC).
Для использования SR2D в проекте нужно подключить к проекту модуль SR2D.vb и класс Sprite.vb, а в папку с проектом (туда, куда компилируется EXE) поместить SR2D.dll соответствующей битности. В 32-битной версии SR2D.dll используются ассемблерные вставки, а 64-битная написана на чистом C++, поэтому некоторые функции в ней работают немного медленнее.
В движке большое количество возможностей, но, в то же время, для простых задач его использовать очень просто.
Я всё никак не напишу полный мануал на текущую версию (есть мануал на предыдущую, но он сильно устарел), но в предлагаемом архиве есть пример самого простого использования, в теме по VB6 примеров больше, можно смотреть там - работа с SR2D почти не отличается, главное отличие в инициализации, которую я здесь продемонстрировал. Если кто-то заинтересуется - я с удовольствием отвечу на вопросы в теме комментариев "Готовых решений", или, если вопросов будет много, можно создать для SR2D отдельную тему.
Приложенный пример написан в VS 2008 Express, в более новых студиях должно работать без проблем.
Вложения
Тип файла: zip SR2D_NET.zip (310.9 Кб, 42 просмотров)
3
Модератор
Эксперт .NET
 Аватар для Yury Komar
4371 / 3441 / 512
Регистрация: 27.01.2014
Сообщений: 6,264
05.07.2024, 14:34  [ТС]
Сохранить данные как массив байт в, или же прочитать из ресурсов exe и dll.
(используя winAPI LoadResource, UpdateResource и т.п.)


Оформил в виде класса для удобства.

Ремарка, данный класс читает и записывает данные ТОЛЬКО в свои собственные типы, не читая и не изменяя уже имеющиеся в нем данные и никак с ними не пересекается...
То есть только свои личные данные хранить и читать.


Класс ResManager_Win32
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
Imports System.IO
Imports System.Runtime.InteropServices
 
Public Class ResManager_Win32
#Region "    WinAPIs"
    Private Declare Unicode Function LoadLibrary Lib "kernel32.DLL" Alias "LoadLibraryW" (ByVal lpLibFileName As String) As IntPtr
    Private Declare Unicode Function FindResource Lib "kernel32.DLL" Alias "FindResourceW" (ByVal hInstance As IntPtr, ByVal lpName As String, ByVal lpType As String) As IntPtr
    Private Declare Function LoadResource Lib "kernel32.DLL" (ByVal hInstance As IntPtr, ByVal hResInfo As IntPtr) As IntPtr
    Private Declare Function LockResource Lib "kernel32.DLL" (ByVal hResData As IntPtr) As IntPtr
    Private Declare Function SizeofResource Lib "kernel32.DLL" (ByVal hInstance As IntPtr, ByVal hResInfo As IntPtr) As Integer
    Private Declare Function FreeLibrary Lib "kernel32.DLL" (ByVal hLibModule As IntPtr) As IntPtr
 
    Private Declare Unicode Function BeginUpdateResource Lib "kernel32.DLL" Alias "BeginUpdateResourceW" (ByVal pFileName As String, ByVal bDeleteExistingResources As Integer) As IntPtr
    Private Declare Unicode Function UpdateResource Lib "kernel32.DLL" Alias "UpdateResourceW" (ByVal hUpdate As IntPtr, ByVal lpType As String, ByVal lpName As String, ByVal wLanguage As Integer, <System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.AsAny)> ByVal lpData As Object, ByVal cbData As Integer) As IntPtr
    Private Declare Unicode Function EndUpdateResource Lib "kernel32.DLL" Alias "EndUpdateResourceW" (ByVal hUpdate As IntPtr, ByVal fDiscard As Integer) As IntPtr
 
    Private Declare Unicode Function EnumResourceNames Lib "kernel32.dll" Alias "EnumResourceNamesW" (ByVal hModule As IntPtr, ByVal dwID As Integer, ByVal lpEnumFunc As EnumResNameProcDelegate, ByVal lParam As IntPtr) As Boolean
    Private Declare Unicode Function EnumResourceTypes Lib "kernel32.dll" Alias "EnumResourceTypesW" (ByVal hModule As IntPtr, ByVal lpEnumFunc As EnumResTypeProc, ByVal lParam As IntPtr) As Boolean
 
    Private Delegate Function EnumResNameProcDelegate(ByVal hModule As IntPtr, ByVal lpszType As IntPtr, ByVal lpszName As IntPtr, ByVal lParam As IntPtr) As Boolean
    Private Delegate Function EnumResTypeProc(hModule As IntPtr, lpszType As IntPtr, lParam As IntPtr) As Boolean
#End Region
 
#Region "    Variables"
    Public ReadOnly FileName As String
    Private ResNamesCollection As Dictionary(Of String, List(Of String))
 
    Private Enum ResourceType
        SYSTEM_CURSOR = 1
        SYSTEM_BITMAP = 2
        SYSTEM_ICON = 3
        SYSTEM_MENU = 4
        SYSTEM_DIALOG = 5
        SYSTEM_STRING = 6
        SYSTEM_FONTDIR = 7
        SYSTEM_FONT = 8
        SYSTEM_ACCELERATOR = 9
        SYSTEM_RCDATA = 10
        SYSTEM_MESSAGETABLE = 11
        SYSTEM_GROUP_CURSOR = 12
        SYSTEM_GROUP_ICON = 14
        SYSTEM_VERSION = 16
        SYSTEM_DLGINCLUDE = 17
        SYSTEM_PLUGPLAY = 19
        SYSTEM_VXD = 20
        SYSTEM_ANICURSOR = 21
        SYSTEM_ANIICON = 22
        SYSTEM_HTML = 23
        SYSTEM_MANIFEST = 24
    End Enum
#End Region
 
#Region "    Private Methods"
    Private Sub Read_Names()
        Dim hLibrary = LoadLibrary(FileName)
 
        If hLibrary <> IntPtr.Zero Then
            ResNamesCollection = New Dictionary(Of String, List(Of String))
 
            EnumResourceTypes(hLibrary,
                              Function(hModule As IntPtr, lpszType As IntPtr, lParam As IntPtr) As Boolean
                                  EnumResourceNames(hModule, lpszType, AddressOf EnumResTypesProc, IntPtr.Zero)
                                  Return True
                              End Function, IntPtr.Zero)
        End If
 
        FreeLibrary(hLibrary)
    End Sub
 
    Private Function EnumResTypesProc(hModule As IntPtr, lpszType As IntPtr, ByVal lpszName As IntPtr, ByVal lParam As IntPtr) As Boolean
        Dim TypeName As String
        Dim ResName As String
 
        'Convert Resource Type Name
        Select Case True
            Case [Enum].GetValues(GetType(ResourceType)).Cast(Of Integer).Contains(lpszType.ToInt32())
                TypeName = [Enum].GetName(GetType(ResourceType), lpszType.ToInt32())
 
            Case lpszType.ToInt32() > &HFFFF
                TypeName = Marshal.PtrToStringUni(lpszType)
 
            Case Else
                TypeName = lpszType.ToInt32().ToString()
        End Select
 
        If TypeName.Trim <> String.Empty Then
            If Not ResNamesCollection.ContainsKey(TypeName) Then
                ResNamesCollection.Add(TypeName, New List(Of String))
            End If
        End If
 
        'Convert Resource Item Name
        Select Case True
            Case lpszName.ToInt32() > &HFFFF
                ResName = Marshal.PtrToStringUni(lpszName)
            Case Else
                ResName = lpszName.ToInt32().ToString()
        End Select
 
        If ResName.Trim <> String.Empty Then
            ResNamesCollection.Item(TypeName).Add(ResName)
        End If
 
        Return True
    End Function
#End Region
 
#Region "    Class Constructor"
    Sub New(FileName As String)
        If Not IO.File.Exists(FileName) Then
            Throw New FileNotFoundException("File not found:" & vbNewLine & FileName)
        End If
 
        Me.FileName = FileName
        Read_Names()
    End Sub
#End Region
 
#Region "    Public Functions"
    Public Function GetAllResourceTypes() As String()
        Return ResNamesCollection.Keys.ToArray
    End Function
 
    Public Function GetUserResourceTypes() As String()
        Return ResNamesCollection.Keys.Where(Function(x) Not x.StartsWith("SYSTEM_")).ToArray
    End Function
 
    Public Function GetUserResourceNames(ResType As String) As String()
        If Not ResNamesCollection.ContainsKey(ResType) Then
            Throw New Exception($"Resource type '{ResType}' does not exist.")
        End If
 
        Return ResNamesCollection.Item(ResType).ToArray
    End Function
 
    Public Function GetUserResource_Image(ResType As String, ResName As String) As Bitmap
        Dim b = GetUserResource_Bytes(ResType, ResName)
        If Not b Is Nothing Then
            Using M = New MemoryStream(b)
                Return New Bitmap(M)
            End Using
        End If
 
        Return Nothing
    End Function
 
    Public Function GetUserResource_Bytes(ResType As String, ResName As String) As Byte()
        If Not ResNamesCollection.ContainsKey(ResType) Then
            Throw New Exception($"Resource type '{ResType}' does not exist.")
        End If
 
        If Not ResNamesCollection.Item(ResType).Contains(ResName) Then
            Throw New Exception($"Resource name '{ResName}' does not exist.")
        End If
 
        Dim hLibrary = LoadLibrary(FileName)
        Dim hRes = FindResource(hLibrary, ResName, ResType)
        Dim hResLoad = LoadResource(hLibrary, hRes)
        Dim hResLock = LockResource(hResLoad)
        Dim intResSize = SizeofResource(hLibrary, hRes)
 
        Dim isSuccessfull As Boolean = (hLibrary <> IntPtr.Zero And hRes <> IntPtr.Zero And hResLoad <> IntPtr.Zero And hResLock <> IntPtr.Zero And intResSize <> 0)
 
        If Not isSuccessfull Then
            FreeLibrary(hLibrary)
            Return Nothing
        End If
 
        Dim ResBuffer(intResSize - 1) As Byte
        Marshal.Copy(hResLock, ResBuffer, 0, ResBuffer.Length)
 
        FreeLibrary(hLibrary)
        Return ResBuffer
    End Function
 
    Public Function SaveUserResource_Bytes(ByteArray() As Byte, ResType As String, ResName As String) As Boolean
        Dim hUpdate = BeginUpdateResource(FileName, False)
        Dim RetUpdate = UpdateResource(hUpdate, ResType, ResName, 0, ByteArray, ByteArray.Length)
        Dim EndRetUpdate = EndUpdateResource(hUpdate, False)
 
        If EndRetUpdate = IntPtr.Zero Then
            Throw New IOException("Can not write to the file, access denied:" & vbNewLine & FileName)
        End If
 
        Dim isSuccessfull As Boolean = (hUpdate <> IntPtr.Zero And RetUpdate <> IntPtr.Zero And EndRetUpdate <> IntPtr.Zero)
 
        'Update names collection
        If isSuccessfull Then Read_Names()
 
        Return isSuccessfull
    End Function
#End Region
End Class


Применение:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    'Создаем экземпляр класса ResManager_Win32
    Dim ResClass As New ResManager_Win32("путь\к\файлу.exe")
 
    'Получить список имен только пользовательских типов (те что сами записали)
    Dim UserTypeNames() As String = ResClass.GetUserResourceTypes()
 
    'Получить список имен ВСЕХ типов(разделов) в файле
    Dim AllTypeNames() As String = ResClass.GetAllResourceTypes()
 
    'Получить список имен ресурсов в пользовательском(нашем) разделе
    Dim UserResNames() As String = ResClass.GetUserResourceNames("Имя_Раздела")
 
    'Получить массив байт из пользовательского ресурса
    Dim ResBytes() As Byte = ResClass.GetUserResource_Bytes("Имя_Раздела", "Имя_Ресурса")
 
    'Получить ресурс в виде картинки, если мы заранее знаем что это картинка
    Dim ResImage As Bitmap = ResClass.GetUserResource_Image("Имя_Раздела", "Имя_Ресурса")
 
    'Записать\перезаписать массива байт "{&HFF, &HFF, &HFF}" в наш файл
    ResClass.SaveUserResource_Bytes({&HFF, &HFF, &HFF}, "Имя_Раздела", "Имя_Ресурса")
6
73 / 69 / 5
Регистрация: 11.04.2021
Сообщений: 299
Записей в блоге: 7
14.11.2024, 04:30
Doc class для программного создания HTML- файлов

Тот самый случай когда библиотеки таскать с собой неохота, но нужно быстро из кода с ваять Html

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Imports System.IO
Public Class Doc
    Private s As String
    Private _htmllang As String
    Private _head As New Queue(Of String)
    Private _body As New Queue(Of String)
    Public Sub New()
        _htmllang = "de-DE"
    End Sub
    Public Sub New(htmllang As String)
        _htmllang = htmllang
    End Sub
 
    Public Sub Head(code As String)
        _head.Enqueue(code)
    End Sub
    Public Sub Body(code As String)
        _body.Enqueue(code)
    End Sub
    Public Function Output() As String
        s = ""
        s &= "<!DOCTYPE html>" & vbNewLine
        s &= "<html lang='" & _htmllang & "'>" & vbNewLine
        s &= "<head>" & vbNewLine
        s &= "<meta charset='UTF-8'>" & vbNewLine
        While _head.Count <> 0
            s &= _head.Dequeue & vbNewLine
        End While
        s &= "</head>" & vbNewLine
        s &= "<body>" & vbNewLine
        While _body.Count <> 0
            s &= _body.Dequeue & vbNewLine
        End While
        s &= "</body>" & vbNewLine
        s &= "</html>"
        s = s.Replace("'", """").Replace("&apos;", "'")
        Return s
    End Function
    Public Function HtmlToString(code As String) As String
        Return code.Replace("'", "&apos;").Replace("""", "'")
    End Function
    Public Sub Save(filename As String)
        If s = "" Then Output()
        If File.Exists(filename) Then File.Delete(filename)
        Using w As New StreamWriter(filename, True, Text.Encoding.Unicode)
            w.Write(s)
            w.Close()
        End Using
    End Sub
Как этим пользоваться

Подключаем класс

VB.NET
1
Dim html As New Doc("ru-RU")
или так

VB.NET
1
Dim html As New Doc()
Что бы не экранировать в строке КОВЫЧККИ перед вставкой в head или body строки c html кодом, воспользуйтесь любым текстовым редактором и замените Апостроф на &apos; и КОВЫЧККИ на Апостроф или прогоните вашу строку через функцию HtmlToString

было
HTML5
1
2
3
4
5
<svg width="150" height="100" xmlns="http://www.w3.org/2000/svg">
  <rect width="100%" height="100%" fill="green" />
  <circle cx="75" cy="50" r="40" fill="yellow" />
  <text x="75" y="60" font-size="30" text-anchor="middle" fill="red">SVG</text>
</svg>
стало
HTML5
1
2
3
4
5
<svg width='150' height='100' xmlns='http://www.w3.org/2000/svg'>
  <rect width='100%' height='100%' fill='green' />
  <circle cx='75' cy='50' r='40' fill='yellow' />
  <text x='75' y='60' font-size='30' text-anchor='middle' fill='red'>SVG</text>
</svg>
пример

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim html As New Doc("ru-RU")
       'добавляем код в head
        html.Head("<meta name='viewport' content='width=device-width, initial-scale=1'>")
        html.Head("<title>Today's Date</title>")
        html.Head("<link rel='stylesheet' href='css/style.css'>")
        'добавляем код в body
        html.Body("<svg width='150' height='100' xmlns='http://www.w3.org/2000/svg'>")
        html.Body("<rect width='100%' height='100%' fill='green' />")
        html.Body("<circle cx='75' cy='50' r='40' fill='yellow' />")
        html.Body("<text x='75' y='60' font-size='30' text-anchor='middle' fill='red'>SVG</text>")
        html.Body("</svg>")
        'выводим в текстбокс
        TextBox1.Text = html.Output
        'сохраняем в файл
        html.Save(Path.Combine(Directory.GetCurrentDirectory, "index.htm"))
1
73 / 69 / 5
Регистрация: 11.04.2021
Сообщений: 299
Записей в блоге: 7
17.11.2024, 08:19
Две небольшие функции, LinesCount и GetLine

LinesCount - подсчитывает количество строк
GetLine - обращается к указанной строке и выводит её значение

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
   ''' <summary>
    ''' LinesCount - подсчитывает количество строк
    ''' </summary>
    ''' <param name="str"></param>
    ''' <returns></returns>
    <Extension()>
    Public Function LinesCount(str As String) As Integer
        If IsNothing(str) Then Return 0
        Dim c As Integer = 1
        For i As Integer = 0 To str.Length - 1
            If str(i) = vbLf(0) Then c += 1
        Next
        Return c
    End Function
 
 
    ''' <summary>
    ''' GetLine - обращается к указанной строке и выводит её значение
    ''' </summary>
    ''' <param name="str"></param>
    ''' <param name="num"></param>
    ''' <returns></returns>
    <Extension()>
    Public Function GetLine(str As String, num As Integer) As String
        If IsNothing(str) OrElse IsNothing(num) OrElse num < 1 Then Return ""
        Dim c As Integer = 1
        Dim p As Integer = 0
        Dim l As String = ""
        For i = 0 To str.Length - 1
            If str(i) = vbLf(0) Then
                If c = num Then
                    If c = 1 Then
                        Dim r(i - 2) As Char
                        For f = 0 To i - 2
                            r(f) = str(p + f)
                        Next
                        l = New String(r)
                        Exit For
                    Else
                        Dim r1(i - 3 - p) As Char
                        For f1 = 0 To i - 3 - p
                            r1(f1) = str(p + 1 + f1)
                        Next
                        l = New String(r1)
                        Exit For
                    End If
                End If
                p = i
                c += 1
            End If
            If i = str.Length - 1 And c = num Then
                Dim r2(str.Length - 2 - p) As Char
                For f2 = 0 To str.Length - 2 - p
                    r2(f2) = str(p + 1 + f2)
                Next
                l = New String(r2)
            End If
        Next
        Return l
    End Function
2
73 / 69 / 5
Регистрация: 11.04.2021
Сообщений: 299
Записей в блоге: 7
01.12.2024, 08:29
Функция подсчета совпадений в строке

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    Public Function StringCount(text As String, find As String, Optional ignorecase As Boolean = False) As Integer
        If IsNothing(text) OrElse IsNothing(find) OrElse text.Length < find.Length Then Return 0
        Dim count As Integer = 0
        Dim flag As Integer = 0
        For a = 0 To text.Length - find.Length
            If If(ignorecase, LCase(text(a)), text(a)) = If(ignorecase, LCase(find(0)), find(0)) Then
                For b = 0 To find.Length - 1
                    If If(ignorecase, LCase(text(a + b)), text(a + b)) <> If(ignorecase, LCase(find(b)), find(b)) Then
                        flag = -1
                        Exit For
                    End If
                Next
                If flag = 0 Then
                    a += find.Length - 1
                    count += 1
                Else
                    flag = 0
                End If
            End If
        Next
        Return count
    End Function
1
Любитель
 Аватар для Тим70
1048 / 758 / 161
Регистрация: 27.01.2019
Сообщений: 1,535
07.12.2024, 11:28
Функция для перевода десятичной дроби в другие системы счисления.
Может кому нибудь пригодится.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
'Десятичная дробь в другие системы счисления
 
    Private Function DecInOther(S As String, Sc As Integer) As String 'S - Ваше число  Sc - система счисления (2-36)
        S = S.Replace(",", ".")
        Dim M As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        Dim St, Ts, B3, St2 As String, C1, B1 As Integer, B2, C2 As Double
        Dim d() As String = Split(S, ".")
        ' Целая часть ****
        B1 = Val(d(0))
            Do While B1 > 0
                C1 = Fix(B1 / Sc)
                C2 = B1 Mod Sc
                B1 = C1
                St2 = Strings.Mid(M, C2 + 1, 1)
                St &= St2
            Loop
            Ts = StrReverse(St)
            If d.Count = 1 Then
                Return Ts
                Exit Function
            End If
            ' Дробная часть ****
            B3 = "0." & d(1)
            B2 = Val(B3)
            St = ""
            For i = 0 To 11
                C1 = Fix(B2 * Sc)
                C2 = B2 * Sc - C1
                B2 = C2
                St2 = Strings.Mid(M, C1 + 1, 1)
                St &= St2
            Next
            Return Ts & "." & St
End Function
3
Любитель
 Аватар для Тим70
1048 / 758 / 161
Регистрация: 27.01.2019
Сообщений: 1,535
07.12.2024, 20:07
Функция перевода из разных систем (2-36) в десятичную дробь.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    Private Function OtherInDec(S As String, Sc As Integer) As String 'S - Ваше число  Sc - система счисления (2-36)
        Try
            S = S.Replace(",", ".")
            Dim M As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
            Dim B3 As String, C1, j, n, n1, Arr(), n2, Mx As Integer, C2 As Double
            'Проверка
            Dim ch3() As Char = S.ToCharArray
            For i = 0 To S.Length - 1
                ReDim Preserve Arr(n2)
                If ch3(i) = "." Then Continue For
                Arr(n2) = M.IndexOf(ch3(i))
                n2 += 1
            Next
            Mx = Arr.Max
            If Mx >= Sc Then
                MsgBox("Конвертация не возможна", vbCritical)
                Exit Function
            End If
            Dim d() As String = Split(S, ".")
            n = d(0).Length - 1
            B3 = StrReverse(d(0))
            Dim ch1() As Char = B3.ToCharArray
            For i = n To 0 Step -1
                C1 = M.IndexOf(ch1(i))
                C2 += C1 * Sc ^ i
            Next
            If d.Count = 1 Then
                Return C2
                Exit Function
            End If
            n1 = d(1).Count - 1
            Dim ch2() As Char = d(1).ToCharArray
            For i = 0 To n1
                j = i + 1
                C1 = M.IndexOf(ch2(i))
                C2 += C1 * Sc ^ (j * (-1))
            Next
            Return C2
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Function
4
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
20.12.2024, 18:43
На просторах NuGet нашел, на мой взгляд, полезную библиотеку MiniExcel. В прилагаемом архиве даны примеры использования этой библиотеки.
MiniExcel — это простая и быстрая библиотека для чтения и записи файлов Excel (*.xlsx) в приложениях NET. Размер библиотеки MiniExcel.dll - 254 Kb. MiniExcel отлично подходит для ситуаций, когда нужно легкое, быстрое и простое в использовании решение.
Область использования:
1. Чтение информации из файлов xlsx
2. Сохранение информации в файлах xlsx
3. Запись информации в шаблоны Excel
PS.
• Конечно, существуют и другие библиотеки для работы с файлами Excel в NET (EPPlus, NPOI, ClosedXML и др.). Обычно они привлекаются, если проект требует расширенных функций обработки Excel, но для большинства стандартных задач MiniExcel наиболее эффективен.
• Оставил библиотеку в архиве, чтобы вам не пришлось искать ее в NuGet.
Вложения
Тип файла: rar withMiniExcel.rar (209.3 Кб, 55 просмотров)
8
73 / 69 / 5
Регистрация: 11.04.2021
Сообщений: 299
Записей в блоге: 7
28.12.2024, 05:03
Не знаю что под капотом у стандартной функции replace, но моя выглядит, вот так.
На скорость работы не проверял. Ошибок пока не замечено


VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    Public Function FindAndReplace(text As String, oldstr As String, newstr As String, Optional ignorecase As Boolean = False) As String
        Dim r As String = ""
        If String.IsNullOrEmpty(text) OrElse String.IsNullOrEmpty(oldstr) OrElse text.Length < oldstr.Length Then
            Return text
        Else
            For t = 0 To text.Length - 1
                If t > text.Length - oldstr.Length Then
                    r += text(t)
                Else
                    Dim s(oldstr.Length - 1) As Char
                    Dim i As Integer = 0
                    For o = t To t + oldstr.Length - 1
                        s(i) = text(o)
                        i += 1
                    Next
                    If If(ignorecase, LCase(New String(s)), New String(s)) = If(ignorecase, LCase(oldstr), oldstr) Then
                        t += oldstr.Length - 1
                        r += newstr
                    Else
                        r += text(t)
                    End If
                End If
            Next
        End If
        Return r
    End Function
примеры

опционально, без учёта регистра

VB.NET
1
MsgBox(FindAndReplace("ll GGGllggäägggggglllllöög +", "GG", "_", True))
c учётом регистра

VB.NET
1
MsgBox(FindAndReplace("ll GGGllggäägggggglllllöög +", "GG", "_"))

 Комментарий модератора 
Обсуждение решения
3
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18355 / 14281 / 5370
Регистрация: 17.03.2014
Сообщений: 28,962
Записей в блоге: 1
13.01.2025, 18:59
Класс для сортировки строк с числами внутри

Иногда есть необходимость отсортировать строки (например имена файлов) с числами внутри. Стандартные методы сортировки здесь не подойдут т.к. выполняют сравнение используя лексикографический порядок. Из-за этого порядок может оказаться неверным. Допустим мы хотим отсортировать массив
VB.NET
1
Dim names As String() = {"file2", "file19", "file1"}
так чтобы числа шли по возрастанию. Т.к. у нас массив, то мы будем использовать Array.Sort
VB.NET
1
Array.Sort(names)
Сортировка даст неверный порядок: file1, file19, file2. Если же воспользоваться предлагаемым классом NaturalStringComparer, то порядок сортировки будет верным.
VB.NET
1
Array.Sort(names, NaturalStringComparer.Instance)
Достоинства класса:
  • Чисел внутри строк может быть сколько угодно. Полезно для сортировки строк вида "2024-02-15".
  • Метод сравнения написан так чтобы не выделять память
Если у вас есть вопросы по коду, то их можно задать в этой теме.

NaturalStringComparer (для .NET Framework)
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Public NotInheritable Class NaturalStringComparer
    Implements IComparer(Of String)
 
    Public Shared ReadOnly Property Instance As NaturalStringComparer = New NaturalStringComparer()
 
    Private Sub New()
    End Sub
 
    Public Function Compare(x As String, y As String) As Integer Implements IComparer(Of String).Compare
 
        If x Is Nothing OrElse y Is Nothing Then
            Return 0
        End If
 
        Dim len1 As Integer = x.Length
        Dim len2 As Integer = y.Length
        Dim marker1 As Integer = 0
        Dim marker2 As Integer = 0
 
        Do While marker1 < len1 AndAlso marker2 < len2
 
            Dim isDigit1 As Boolean = Char.IsDigit(x(marker1))
            Dim isDigit2 As Boolean = Char.IsDigit(y(marker2))
 
            Dim loc1 As Integer = 0
            Dim loc2 As Integer = 0
 
            ' Find next block of numbers or non-numbers inside each string
            Do
                loc1 += 1
                marker1 += 1
            Loop While (marker1 < len1 AndAlso Char.IsDigit(x(marker1)) = isDigit1)
 
            Do
                loc2 += 1
                marker2 += 1
            Loop While (marker2 < len2 AndAlso Char.IsDigit(y(marker2)) = isDigit2)
 
            Dim result As Integer
 
            If isDigit1 AndAlso isDigit2 Then
                Dim thisNumericChunk As Long = ToLong(x, marker1 - loc1, loc1)
                Dim thatNumericChunk As Long = ToLong(y, marker2 - loc2, loc2)
                result = thisNumericChunk.CompareTo(thatNumericChunk)
            Else
                result = String.Compare(x, marker1 - loc1, y, marker2 - loc2, Math.Min(loc1, loc2))
            End If
 
            If result <> 0 Then
                Return result
            End If
 
        Loop
 
        Return len1 - len2
 
    End Function
 
    Private Shared Function ToLong(s As String, index As Integer, len As Integer) As Long
 
        Dim result As Long = 0
        Dim pow10 As Long = 1
 
        Do While len > 1
            len -= 1
            result += pow10 * (Asc(s(index + len)) - 48)
            pow10 *= 10
        Loop
        result += pow10 * (Asc(s(index)) - 48)
 
        Return result
 
    End Function
 
End Class

NaturalStringComparer (для .NET/.NET Core)
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Public NotInheritable Class NaturalStringComparer
    Implements IComparer(Of String)
 
    Public Shared ReadOnly Property Instance As NaturalStringComparer = New NaturalStringComparer()
 
    Private Sub New()
    End Sub
 
    Public Function Compare(x As String, y As String) As Integer Implements IComparer(Of String).Compare
 
        If x Is Nothing OrElse y Is Nothing Then
            Return 0
        End If
 
        Dim len1 As Integer = x.Length
        Dim len2 As Integer = y.Length
        Dim marker1 As Integer = 0
        Dim marker2 As Integer = 0
 
        Do While marker1 < len1 AndAlso marker2 < len2
 
            Dim isDigit1 As Boolean = Char.IsDigit(x(marker1))
            Dim isDigit2 As Boolean = Char.IsDigit(y(marker2))
 
            Dim loc1 As Integer = 0
            Dim loc2 As Integer = 0
 
            ' Find next block of numbers or non-numbers inside each string
            Do
                loc1 += 1
                marker1 += 1
            Loop While (marker1 < len1 AndAlso Char.IsDigit(x(marker1)) = isDigit1)
 
            Do
                loc2 += 1
                marker2 += 1
            Loop While (marker2 < len2 AndAlso Char.IsDigit(y(marker2)) = isDigit2)
 
            Dim result As Integer
 
            If isDigit1 AndAlso isDigit2 Then
                Dim thisNumericChunk As Long = Long.Parse(x.AsSpan(marker1 - loc1, loc1))
                Dim thatNumericChunk As Long = Long.Parse(y.AsSpan(marker2 - loc2, loc2))
                result = thisNumericChunk.CompareTo(thatNumericChunk)
            Else
                result = String.Compare(x, marker1 - loc1, y, marker2 - loc2, Math.Max(loc1, loc2))
            End If
 
            If result <> 0 Then
                Return result
            End If
 
        Loop
 
        Return len1 - len2
 
    End Function
 
End Class
6
34 / 30 / 3
Регистрация: 16.12.2019
Сообщений: 110
07.02.2025, 13:01
На работе столкнулся, что нужно найти из каких чисел складывается сумма, набросал по-быстрому программулинку

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
Public Class Form1
    Dim numbers() As String
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ReDim numbers(Me.ListBox1.Items.Count - 1)
        Me.ListBox1.Items.CopyTo(numbers, 0)
        'Dim Numbers_for_calculate(numbers.Count - 1) As Double
        Dim target As Double = Double.Parse(TextBox1.Text)
        Dim closetSum As Double = FindClosetSum(numbers, target)
        MsgBox("Ближайшая сумма: " & closetSum)
    End Sub
 
    Function FindClosetSum(numbers() As String, target As Double) As Double
        Dim closestSum As Double = 0
        Dim n As Integer = numbers.Length
        Dim totalCombinations As Integer = 1 << n ' 2^n
        ProgressBar1.Maximum = totalCombinations
 
        For i As Integer = 0 To totalCombinations - 1
            ProgressBar1.Value = i
            Dim currentSum As Double = 0
            Dim currentElements As New List(Of Double)()
            For j As Integer = 0 To n - 1
                If (i And (1 << j)) <> 0 Then
                    currentSum += Double.Parse(numbers(j))
                    currentElements.Add(numbers(j))
                End If
            Next
            If Math.Abs(target - currentSum) < Math.Abs(target - closestSum) Then
                closestSum = currentSum
                ListBox2.Items.Clear()
                For Each items In currentElements
 
                    ListBox2.Items.Add(items)
                Next
 
            End If
        Next
        Return closestSum
 
    End Function
 
    Dim Sum As Double
 
    Private Sub ListBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles ListBox1.KeyDown
        If e.Control AndAlso e.KeyCode = Keys.V Then
 
            For Each elem In System.Windows.Forms.Clipboard.GetText().ToString.Split(Chr(10))
                If Double.TryParse(elem, 0) Then
                    ListBox1.Items.Add(elem)
                    Sum += Double.Parse(elem)
                End If
            Next
            Label4.Text = "Сумма: " & Sum
 
 
            'ListBox1.Items.Add(System.Windows.Forms.Clipboard.GetText())
        End If
        If e.KeyCode = Keys.Delete Then
            ListBox1.Items.Clear()
            Sum = 0
        End If
 
    End Sub
 
 
 
    Private Sub ListBox2_MouseDown(sender As Object, e As KeyEventArgs) Handles ListBox2.KeyDown
        If e.Control AndAlso e.KeyCode = Keys.C Then
            Dim str As String = ""
 
            For Each items In ListBox2.Items
                If str = "" Then
                    str &= items
                Else
                    str &= Chr(10) & items
                End If
            Next
            Clipboard.SetText(str)
        End If
    End Sub
End Class
P.S. При выделении списка (левого), сочетание CTRL+V - вставляет числа, DEL - очищает всё. При выделении правого списка CTRL+С - копирует

 Комментарий модератора 
Тема для обсуждения
Миниатюры
Готовые решения и полезные коды на Visual Basic .NET (Часть-2)  
Вложения
Тип файла: rar Sum.rar (17.0 Кб, 2 просмотров)
0
73 / 69 / 5
Регистрация: 11.04.2021
Сообщений: 299
Записей в блоге: 7
10.02.2025, 05:01
Китайский искусственный интеллект DEEPSEEK. Кому интересно... код
Ключ, расценки у них на сайте. есть мобильная версия

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Imports System.Net.Http
Imports System.Text
 
Public Class Form1
    ' Ваш API-ключ (замените на реальный)
    Private Const ApiKey As String = "ваш_api_ключ"
    Private Const ApiUrl As String = "https://api.deepseek.com/chat/completions"
 
    ' Обработчик нажатия кнопки
    Private Async Sub SendButton_Click(sender As Object, e As EventArgs) Handles SendButton.Click
        ' Получаем текст из TextBox
        Dim userMessage As String = InputTextBox.Text
 
        ' Отправляем запрос и получаем ответ
        Dim responseText As String = Await SendApiRequestAsync(userMessage)
 
        ' Отображаем ответ в RichTextBox
        ResponseRichTextBox.Text = responseText
    End Sub
 
    ' Функция для отправки запроса к API
    Private Async Function SendApiRequestAsync(userMessage As String) As Task(Of String)
        Using client As New HttpClient()
            ' Устанавливаем заголовки
            client.DefaultRequestHeaders.Add("Authorization", $"Bearer {ApiKey}")
 
            ' Тело запроса (JSON)
            Dim requestBody As String = $"{{
                ""model"": ""deepseek-chat"",
                ""messages"": [{{""role"": ""user"", ""content"": ""{userMessage}""}}],
                ""stream"": false
            }}"
            Dim content As New StringContent(requestBody, Encoding.UTF8, "application/json")
 
            ' Отправляем POST-запрос
            Dim response As HttpResponseMessage = Await client.PostAsync(ApiUrl, content)
 
            ' Читаем ответ
            If response.IsSuccessStatusCode Then
                Dim responseBody As String = Await response.Content.ReadAsStringAsync()
                Return responseBody
            Else
                Return "Ошибка: " & response.StatusCode.ToString()
            End If
        End Using
    End Function
 
 
End Class
 Комментарий модератора 
Тема для обсуждения
0
73 / 69 / 5
Регистрация: 11.04.2021
Сообщений: 299
Записей в блоге: 7
24.03.2025, 04:17
Пример динамического созданная программы


Убедитесь, что файлы AppIcon.ico и WelcomeMessage.txt существуют в папке Debug


VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
    Sub CreateApp()
        ' Исходный код программы, которую мы будем компилировать
        Dim sourceCode As String = "
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Reflection
Imports System.IO ' Для работы с потоками
 
<Assembly: AssemblyTitle(""Моя программа"")>
<Assembly: AssemblyDescription(""Это динамически созданная программа с ресурсами и описанием."")>
<Assembly: AssemblyVersion(""1.0.0.0"")>
<Assembly: AssemblyFileVersion(""1.0.0.0"")>
<Assembly: AssemblyCompany(""Microsoft"")>
<Assembly: AssemblyProduct(""DynamicProgram"")>
<Assembly: AssemblyCopyright(""Copyright © Microsoft 2011"")>
 
Public Class DynamicForm
    Inherits Form
 
    Public Sub New()
        ' Устанавливаем заголовок формы
        Me.Text = ""Динамическая форма""
 
        ' Загружаем иконку из ресурсов
        Dim iconStream As Stream = Assembly.GetEntryAssembly().GetManifestResourceStream(""AppIcon.ico"")
        If iconStream IsNot Nothing Then
            Me.Icon = New System.Drawing.Icon(iconStream)
            iconStream.Close()
        Else
            MessageBox.Show(""Иконка не найдена в ресурсах!"")
        End If
 
        ' Создаем Label для отображения строки из ресурсов
        Dim label As New Label()
        Dim textStream As Stream = Assembly.GetEntryAssembly().GetManifestResourceStream(""WelcomeMessage.txt"")
        If textStream IsNot Nothing Then
            Dim reader As New StreamReader(textStream)
            label.Text = reader.ReadToEnd()
            reader.Close()
        Else
            label.Text = ""Текст не найден""
        End If
 
        label.AutoSize = True
        label.Location = New Point(10, 10)
 
        ' Добавляем Label на форму
        Me.Controls.Add(label)
 
        ' Устанавливаем размер формы
        Me.Size = New Size(300, 200)
    End Sub
End Class
 
Module Program
    Sub Main()
        Application.Run(New DynamicForm())
    End Sub
End Module"
 
        ' Создаем провайдер для компиляции VB.NET кода
        Dim provider As New VBCodeProvider()
        Dim parameters As New CompilerParameters()
 
        ' Настройка параметров компиляции
        parameters.GenerateInMemory = False
        parameters.GenerateExecutable = True
        parameters.OutputAssembly = "DynamicProgram.exe"
        parameters.IncludeDebugInformation = True ' Включаем отладочную информацию
 
        ' Указываем, что создается Windows Forms приложение
        parameters.CompilerOptions = "/target:winexe"
 
        ' Указываем иконку для EXE-файла
        parameters.CompilerOptions &= " /win32icon:AppIcon.ico"
 
        ' Добавляем ресурсы (иконку и текстовый файл)
        parameters.EmbeddedResources.Add("AppIcon.ico") ' Добавляем иконку в ресурсы
        parameters.EmbeddedResources.Add("WelcomeMessage.txt") ' Добавляем строку в ресурсы
 
        ' Добавляем ссылки на необходимые сборки
        parameters.ReferencedAssemblies.Add("System.dll")
        parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll")
        parameters.ReferencedAssemblies.Add("System.Drawing.dll")
        parameters.ReferencedAssemblies.Add("System.Reflection.dll")
 
        ' Компиляция кода
        Dim results As CompilerResults = provider.CompileAssemblyFromSource(parameters, sourceCode)
 
        ' Проверка на ошибки
        If results.Errors.HasErrors Then
            dim ms as String = "Ошибки компиляции:" & Environment.NewLine
        
            For Each [error] As CompilerError In results.Errors
               ms &= [error].ErrorText & Environment.NewLine
            Next
            MessageBox.Show( ms , "Ошибка компиляции", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Else
            MessageBox.Show("Компиляция успешно завершена! Создан файл: " & parameters.OutputAssembly, "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    End Sub
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.03.2025, 04:17

Visual Basic .Net и Visual Basic 6.0 - В чём разница
В общем возник вопрос: Visual Bisic.Net и Visual Basic - это два разных языка, или же .NET версия...

Готовые коды для решения лабораторных работ
Доброго времени суток всем! Очень срочно нужны готовые коды для решения лабораторных работ в С# по...

Изменение элемента коллекции классов (основано на "готовых решениях, полезных кодах")
Основа тут (спасибо Памирычу): Visual Basic .NET FAQ. Готовые решения, полезные коды Вопрос...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru