Рейтинг@Mail.ru
aave

aave

Print Friendly, PDF & Email

Часто необходимо перевести число из одной системы счисления в другую. Предлагается программный код статического класса, который реализует данную функциональность в виде статического метода ConvertFromTo(), а также дополнительных методов расширения.

Программный код для перевода чисел в разных системах счисления (разворачивается)
''' <summary>
''' Вспомогательные.
''' </summary>
<Runtime.CompilerServices.Extension()>
Public Module Helpers

    ''' <summary>
    ''' Преобразует число из десятичной системы счисления в число в восьмеричной системе счисления.
    ''' </summary>
    <Runtime.CompilerServices.Extension()>
    Public Function ToOctal(dec As Integer) As Integer
        Return ConvertFromTo(dec, 10, 8)
    End Function

    ''' <summary>
    ''' Преобразует число из десятичной системы счисления в число в двоичной системе счисления.
    ''' </summary>
    <Runtime.CompilerServices.Extension()>
    Public Function ToBinary(dec As Integer) As Integer
        Return ConvertFromTo(dec, 10, 2)
    End Function

    ''' <summary>
    ''' Преобразует число из заданной системы счисления в другую.
    ''' </summary>
    ''' <param name="number">Число в исходной системе счисления.</param>
    ''' <param name="fromBase">Исходная система счисления.</param>
    ''' <param name="toBase">Целевая система счисления.</param>
    ''' <remarks>
    ''' Будьте внимательны: при переводе в двоичную систему может возникнуть ошибка переполнения, т.к. двоичные числа могут быть очень длинные.
    ''' Также здесь не реализован перевод чисел из и в 16-ную систему счисления, в которой применяется цифро-буквенная нотация.
    </remarks>
    Public Function ConvertFromTo(number As Integer, fromBase As Integer, toBase As Integer) As Integer
        Dim result As Integer = 0
        Dim i As Integer = 0
        Do While (number <> 0)
            result += (number Mod toBase) * CInt(Math.Pow(fromBase, i))
            number = CInt(Math.Truncate(number / toBase))
            i += 1
        Loop
        Return result
    End Function

End Module
Print Friendly, PDF & Email
Подробнее ...

Кодирование и декодирование свёрточного кода по алгоритму Витерби

Опубликовано в Программирование

Print Friendly, PDF & Email
По свёрточным кодам написано достаточно литературы, как по кодерам, так и по декодерам. Тем не менее, понятного и простого описания аппаратной реализации декодера, реализующего алгоритм Витерби, мне найти не удалось ни в русскоязычном, ни в англоязычном интернете. Если чего-то нет – иногда проще восполнить пробел и сделать самому. Этот материал написан именно из таких соображений, максимально простым языком, с избыточными подробностями. Надеюсь, что он в достаточной мере раскрывает тему построения кодера и декодера свёрточного кода.
Print Friendly, PDF & Email
Подробнее ...
Print Friendly, PDF & Email

Чтобы создать окно без рамок и без стандартных элементов управления, в файле разметки в свойствах окна достаточно добавить 3 атрибута: WindowStyle, AllowsTransparency и Background.

<Window x:Class="BorderlessWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        WindowStyle="None"
        AllowsTransparency="True"
        Background="Transparent"
        MouseLeftButtonDown="Window_MouseLeftButtonDown"
        Title="Hello, Soltau.ru"
        Width="200" Height="200">
    <Grid>
        <Rectangle Fill="Yellow" Opacity="0.7" RadiusX="40" RadiusY="40" />
        <Button Width="100" Height="30" Content="Закрыть" Click="Button_Click" />
    </Grid>
</Window>

Для удобства пользователя желательно добавить возможность закрыть окно, а также перетаскивать его по рабочему столу:

Public Class BorderlessWindow

    Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
        Me.Close()
    End Sub

    Private Sub Window_MouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs)
        Me.DragMove()
    End Sub

End Class

Выглядеть это будет примерно так:

Окно без рамок в WPF
Окно без рамок в WPF
Print Friendly, PDF & Email
Подробнее ...
Print Friendly, PDF & Email

Чтобы вместо стандартного MessageBox в приложении WPF использовать более современное и «красивое» окно, можно использовать средства самой Windows. Напишем класс-помощник, который будет выводить диалоговое окно, используя системную библиотеку comctl32.dll.

Imports System.Runtime.InteropServices

''' <summary>
''' "Красивое" диалоговое окно.
''' </summary>
Public Module TaskDialogHelper

    <DllImport("comctl32.dll", CharSet:=CharSet.Unicode, PreserveSig:=False)>
    Public Function TaskDialog(hwndParent As IntPtr, hInstance As IntPtr, title As String, mainInstruction As String, content As String, buttons As TaskDialogButtons, icon As TaskDialogIcon) As TaskDialogResult
    End Function

    Public Enum TaskDialogResult As Integer
        Ok = 1
        Cancel = 2
        Retry = 4
        Yes = 6
        No = 7
        Close = 8
    End Enum

    <Flags>
    Public Enum TaskDialogButtons As Integer
        Ok = &H1
        Yes = &H2
        No = &H4
        Cancel = &H8
        Retry = &H10
        Close = &H20
    End Enum

    Public Enum TaskDialogIcon As Integer
        Shield = 65532
        Information 
        [Error] 
        Warning 
    End Enum

End Module

Также в манифесте проекта необходимо раскомментировать следующий участок:

  <dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="*"
          publicKeyToken="6595b64144ccf1df"
          language="*"
        />
    </dependentAssembly>
  </dependency>

Использовать код можно таким образом:

Dim dr = TaskDialogHelper.TaskDialog(New System.Windows.Interop.WindowInteropHelper(Me).Handle,
    IntPtr.Zero,
    "Лаконичный заголовок окна",
    "Здесь будет основной текст сообщения.",
    "А здесь вспомогательный.",
    TaskDialogHelper.TaskDialogButtons.Yes Or TaskDialogHelper.TaskDialogButtons.No,
    TaskDialogHelper.TaskDialogIcon.Information)

Желательно также при выводе данного окна проверять версию операционной системы: данное окно можно использовать в Windows Vista и более современных (версия больше 6):

If (System.Environment.OSVersion.Version.Major >= 6) Then 
    …
Print Friendly, PDF & Email
Подробнее ...
Подписаться на этот канал RSS