|
Модератор
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,257
|
|||||||
Готовые решения и полезные коды на Visual Basic .NET (Часть-2)26.08.2021, 13:11. Показов 25267. Ответов 42
Данная тема является продолжение одноимённой темы
Готовые решения и полезные коды на Visual Basic .NET (Часть-1) Предлагаю в этой теме размещать ответы на часто задаваемые вопросы и просто делиться полезными кодами. Для исходников есть отдельная тема и они будут либо удаляться из этой темы, либо переноситься в соответствующую тему) Обращаю внимание на некоторые моменты, которые являются дополнением к основным правилам
Просьба не спешите постить решения "сгоряча", тщательно обдумайте список вопросов, их тематику и порядок. Перед загрузкой архива на форума настоятельно рекомендуется выполнить шаги по уменьшению его размера:
Если вы найдете информацию, которой можно было бы дополнить ваши предыдущие сообщения, что-то изменить или перегруппировать, пишите модераторам в л/с.
2
|
|||||||
| 26.08.2021, 13:11 | |
|
Ответы с готовыми решениями:
42
Готовые решения и полезные коды на Visual Basic .NET (Часть-1) Обсуждение кода из темы "Готовые решения и полезные коды": Функция MeTka Обсуждение "Суммы чисел" из темы "Готовые рещения и полезные коды" |
|
Модератор
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,257
|
||||||
| 27.08.2021, 18:44 [ТС] | ||||||
|
RSS Feed на Visual Basic .NET
На вход получает URL Feed'a, на выходе DataTable, который можно отобразить в таблице. Код
0
|
||||||
|
Нарушитель
|
||||||
| 28.08.2021, 09:56 | ||||||
|
Определяем, на какой ОС юзер запустил приложение
Совсем недавно, при разработке кроссплатформенного приложения на Mono мне понадобился код, умеющий отличать Windows/Unix систему. (можно вместо Console использовать MsgBox, при этом добавив ссылку и библиотеку Microsoft.VisualBasic.dll в сборку) Код был проверен на Windows 7, Windows 10 || WSL Kali, Ubuntu и исправно работает
1
|
||||||
|
147 / 135 / 34
Регистрация: 28.02.2014
Сообщений: 165
|
|||||||||||
| 25.09.2021, 01:50 | |||||||||||
|
ColorEditor для редактирования свойств цвета с поддержкой альфаканала
Код
Использование:
3
|
|||||||||||
|
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
|
||||||
| 31.01.2022, 16:17 | ||||||
|
Текстовое поле, которое умеет вычислять введённое выражение после нажатия знака "=".
Навеяно темой. Синтаксис выражения похож на SQL, но работает как с точкой, так и с запятой. Кликните здесь для просмотра всего текста
8
|
||||||
|
Нарушитель
|
|||||||||||
| 21.05.2022, 18:40 | |||||||||||
|
Определяем: Используется настоящая или система в виртуальной машине?
Только для познавательных целей. Создавал модуль интеграции основной системы с виртуальной, вот тут и пригодилось подобное решение. Если приложение запущено в VirtualBox или другой подобной песочнице, то функция VM_Detected() вернёт True vmdetector.vb:
0
|
|||||||||||
|
Нарушитель
|
||||||
| 28.08.2022, 14:18 | ||||||
|
Определяем тип файла: NET-гибрид или натив?
На днях писал свой криптор-обфускатор для бинарей, на ум пришло гениальное и простое решение для определения типа EXE-файла через его открытие в виде бинарника, перевод в строку и поиск нужных данных. (открывать как текст сразу нельзя - файл может сохраниться не полностью!)
0
|
||||||
|
Модератор
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,257
|
||||||
| 15.09.2022, 15:20 [ТС] | ||||||
|
Функции конвертации String->Bytes, String->Binary, String->Hex, Bytes->String, Binary->String, Hex->Bytes, Hex->String
(помощник при работе с бинарными или Hex данными)
5
|
||||||
|
Модератор
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,257
|
||||||
| 16.09.2022, 20:11 [ТС] | ||||||
|
Установить разделитель дробных чисел в RUNTIME на ТОЧКУ
Очень полезно, когда нужно работать с числами у которых должна быть точка как разделитель. Ну и такая конструкция (замена) .ToString().Replace(",", ".") сама собой отпадет, да и памяти она кушает, когда очень много данных приходится обрабатывать\парсить.
5
|
||||||
|
7 / 7 / 0
Регистрация: 11.12.2022
Сообщений: 12
|
||||||||||||||||
| 17.12.2022, 10:24 | ||||||||||||||||
|
Расширенный класс RichTextBox:
- вместо библиотеки riched20.dll (не поддерживает таблицы с ячейками в несколько строк) загружается msftedit.dll (поддерживает таблицы с ячейками в несколько строк) - добавлен метод печати содержимого RichTextBox с возможностью пропуска непечатаемых страниц Код для класса RichTextBoxE: Кликните здесь для просмотра всего текста
Ниже приведена реализация печати содержимого RichTextBox (код объемный, поэтому привожу только основную идею): - расчет массива начальных позиций печатаемого текста каждой страницы - печать всех страниц - печать выбранных страниц На основной форме FormMain должны быть контролы: меню MenuStripFilePrint и PrintDocumentMain Код для основной формы: Кликните здесь для просмотра всего текста
Также можно реализовать собственную форму FormPrint для предварительного просмотра перед печатью на форме должна быть PanelPage, на которой отображаются страницы предварительного просмотра идея в использовании класса PreviewPrintController: Кликните здесь для просмотра всего текста
3
|
||||||||||||||||
|
7 / 7 / 0
Регистрация: 11.12.2022
Сообщений: 12
|
|||||||||||||||||||||
| 18.12.2022, 07:00 | |||||||||||||||||||||
|
Текстовый редактор в стиле WordPad
Весь код объемный, поэтому ограничусь общим описанием трех моментов: 1) работа в трех режимах переноса текста: в пределах страницы; в пределах окна; без переноса; 2) выделение текста с помощью мыши в зонах слева и справа от текстового окна; 3) поддержка масштабирования содержимого текстового окна, в том числе при изменении размеров окна приложения. 1) создаем макет редактора (названия контролов специфические - можно переименовать как вам удобно): PanelResult - общий контейнер для всех элементов, фон редактора слева и справа от страницы; RichTextBoxResult - непосредственно текстовое окно как часть страницы (выключаем встроенные скролбары ScrollBars = RichTextBoxScrollBars.None); LabelPageLeft - примыкает слева к текстовом окну, имитирует левое поле страницы шириной ResultPageMarginLeftPixel (правое поле страницы задается свойством RichTextBoxResult.RightMargin=ResultPage MarginRightPixel); LabelLeft - фон редактора слева от страницы; VSResult - вертикальный скролбар (в правой части контейнера PanelResult, может не примыкать к тестовому окну); HSResult - горизонтальный скролбар (внизу контейнера PanelResult, может не примыкать к тестовому окну). Слева от текстового окна курсор мыши будет меняться на LeftHand (чтобы не ссылаться на файл курсора на диске, помещаем картинку будущего курсора в PictureBoxCursorLeftHand - горячая точка курсора должна быть по центру картинки, и превращаем ее в курсор): Кликните здесь для просмотра всего текста
связь между текстовым окном и скролбарами обеспечиваем через Win API: Кликните здесь для просмотра всего текста
2) обеспечим выделение текста с помощью мыши в зонах слева и справа от текстового окна (управляем свойством RichTextBoxResult.Capture = False/True): Кликните здесь для просмотра всего текста
3) Еще требуется обеспечить изменение режимов представления и масштаба текстового окна: Кликните здесь для просмотра всего текста
Весь код привести не получилось. Понимаю, что в чужом коде копаться - дело неблагодарное, постарался показать основную идею.
0
|
|||||||||||||||||||||
|
7 / 7 / 0
Регистрация: 11.12.2022
Сообщений: 12
|
||||||||||||||||
| 18.12.2022, 09:09 | ||||||||||||||||
|
Работа с текстовыми окнами
ввод только чисел (в рассмотрение включен случай, когда в тексте был выделен фрагмент): Кликните здесь для просмотра всего текста
Однако при вставке текста из буфера обмена пользователь сможет обойти эти ограничения. Поэтому перед использованием числа из текстового окна выполняем проверку: Кликните здесь для просмотра всего текста
Часто бывает удобно, чтобы при попадании фокуса на текстовое поле, курсор размещался за крайним правым символом: Кликните здесь для просмотра всего текста
0
|
||||||||||||||||
|
7 / 7 / 0
Регистрация: 11.12.2022
Сообщений: 12
|
||||||||||||||||
| 24.12.2022, 07:42 | ||||||||||||||||
|
Полезный код для ComboBox
1) Всплывающая подсказка для элементов списка На форме должны быть расположены: ComboBox1 - имя контрола ComboBox (необходимо задать режим "ручной" прорисовки элементов списка ComboBox1.DrawMode = DrawMode.OwnerDrawFixed) ToolTip1 - контрол всплывающей подсказки Кликните здесь для просмотра всего текста
2) Цветные элементы списка На форме должны быть расположены: ComboBoxColorScheme - контрол ComboBox с элементами списка, обозначающими цветовую схему: Black; DarkStateGray; Brown; SaddleBrown; OrangeRed; ForestGreen; SeaGreen; RoyalBlue Необходимо задать режим "ручной" прорисовки элементов списка ComboBoxColorScheme.DrawMode = DrawMode.OwnerDrawFixed LabelSampleColorScheme - метка, цвет которой соответствует элементу списка (образец выбранного цвета) Кликните здесь для просмотра всего текста
3) Раскрыть/закрыть список нажатием клавиши пробела Кликните здесь для просмотра всего текста
0
|
||||||||||||||||
|
7 / 7 / 0
Регистрация: 11.12.2022
Сообщений: 12
|
||||||||||||||||
| 24.12.2022, 16:13 | ||||||||||||||||
|
Имитация плоской кнопки (Button) с помощью метки (Label),
которая реагирует только на события мыши и не может получить фокус, код подходит для группы из нескольких элементов. Заранее подготовьте три цвета, например, такие: Кликните здесь для просмотра всего текста
На форме разместите две метки Label1, Label2 или другое количество - по необходимости. настройте внешний вид и исходный цвет меток: Кликните здесь для просмотра всего текста
Код для событий меток Кликните здесь для просмотра всего текста
0
|
||||||||||||||||
| 25.12.2022, 06:39 | ||||||
|
Думаю понадобиться тем кто занимается графикой и игростроением
В архиве рабочий пример по применению
1
|
||||||
|
7 / 7 / 0
Регистрация: 11.12.2022
Сообщений: 12
|
||||||||||||||||
| 25.12.2022, 08:53 | ||||||||||||||||
|
Некоторые приемы для разработки текста в формате RTF на базе контрола RichTextBox
1) Если текст должен иметь сложную структуру, например, таблицы с ячейками в несколько строк, то "родная" библиотека Visual Studio riched20.dll не позволяет это реализовать. В этом случае рекомендую использовать библиотеку msftedit.dll, поставляемую с программой WordPad, вариант реализации описан здесь: Готовые решения и полезные коды на Visual Basic .NET (Часть-2). Там же приводится метод печати содержимого RichTextBox. в проекте использую два экземпляра RichTextBox Кликните здесь для просмотра всего текста
2) Для отработки форматирования текста удобно использовать две процедуры по конвертации текста с кодом RTF и без кода RTF: Кликните здесь для просмотра всего текста
Эти процедуры удобно вызывать во время выполнения приложения кнопками/элементами/командами, что позволяет в онлайн режиме редактировать RTF код и изучать его влияние на представление текста, например, если в окне RichTextBoxResult с текущим шрифтом Times New Roman написать строку: 0123456789, то текст с RTF кодом будет иметь вид: Кликните здесь для просмотра всего текста
{\rtf1\ansi\ansicpg1251\deff0\nouicompat \deflang1049{\fonttbl{\f0\fnil\fcharset2 04 Times New Roman;}}
{\*\generator Riched20 10.0.14393}\viewkind4\uc1 \pard\f0\fs24 0123456789\par } То есть RTF код автоматически генерируется окном RichTextBoxResult - остается только списать . Дальше вооружаетесь последней спецификацией формата RTF (на сегодня версия 1.9.1) и путем супермощного метода проб и ошибок формируете текст с необходимой структурой. Очень удобно разработать макет будущего текста в каком-либо продвинутом редакторе, например, MS Word, затем скопировать его в окно RichTextBoxResult и увидеть RTF код. В следующем примере выводится таблица из двух строк и четырех столбцов, в которой в столбце 2 две строки объединены в одну ячейку:Кликните здесь для просмотра всего текста
{\rtf1\ansi\ansicpg1251\deff0\nouicompat \deflang1049{\fonttbl{\f0\froman\fprq2\f charset204 Times New Roman;}{\f1\fnil\fcharset204 Times New Roman;}}
{\*\generator Riched20 10.0.14393}\viewkind4\uc1 \pard\widctlpar\f0\fs28\'d2\'e0\'e1\'eb\ 'e8\'f6\'e0 \'f1 \'ff\'f7\'e5\'e9\'ea\'e0\'ec\'e8 \'e2 \'ed\'e5\'f1\'ea\'ee\'eb\'fc\'ea\'ee \'f1\'f2\'f0\'ee\'ea\par \trowd\trgaph108\trleft5\trbrdrl\brdrs\b rdrw10 \trbrdrt\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trpaddl108\trpaddr108\trpaddfl3\trpaddf r3 \clvertalc\clbrdrl\brdrw10\brdrs\clbrdrt \brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clb rdrb\brdrw10\brdrs \cellx2341\clvmgf\clvertalc\clbrdrl\brdr w10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\ brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx4677\clvertalc\clbrdrl\brdrw10\brd rs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10 \brdrs\clbrdrb\brdrw10\brdrs \cellx7013\clvertalc\clbrdrl\brdrw10\brd rs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10 \brdrs\clbrdrb\brdrw10\brdrs \cellx9349 \pard\intbl\widctlpar\qc 1.1\cell 1.2\cell 1.3\cell 1.4\cell\row\trowd\trgaph108\trleft5\trb rdrl\brdrs\brdrw10 \trbrdrt\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trpaddl108\trpaddr108\trpaddfl3\trpaddf r3 \clvertalc\clbrdrl\brdrw10\brdrs\clbrdrt \brdrw10\brdrs\clbrdrr\brdrw10\brdrs\clb rdrb\brdrw10\brdrs \cellx2341\clvmrg\clvertalc\clbrdrl\brdr w10\brdrs\clbrdrt\brdrw10\brdrs\clbrdrr\ brdrw10\brdrs\clbrdrb\brdrw10\brdrs \cellx4677\clvertalc\clbrdrl\brdrw10\brd rs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10 \brdrs\clbrdrb\brdrw10\brdrs \cellx7013\clvertalc\clbrdrl\brdrw10\brd rs\clbrdrt\brdrw10\brdrs\clbrdrr\brdrw10 \brdrs\clbrdrb\brdrw10\brdrs \cellx9349 \pard\intbl\widctlpar\qc 2.1\cell\cell 2.3\cell 2.4\cell\row \pard\f1\fs24\par } Из полученного RTF кода удаляю всякий "хлам", который никак не влияет на структуру текста. 3) При программном создании RTF кода очень эффективно использовать класс StringBuilder. При больших объемах текста после использования StringBuilder следует применить метод Clear для освобождения памяти. В качестве примера ниже привожу фрагмент кода из своего инженерного приложения: Кликните здесь для просмотра всего текста
1
|
||||||||||||||||
|
7 / 7 / 0
Регистрация: 11.12.2022
Сообщений: 12
|
||||||||||||||||||||||||||
| 28.12.2022, 17:09 | ||||||||||||||||||||||||||
|
Получение позиции вертикального скроллинга RichTextBox с помощью Win API
Сначала уточнение по библиотекам riched20.dll и msftedit.dll, которые обеспечивают работу Rich Text Edit Control (по нашему RichTextBox). Буквально недавно выяснил, что при Net Framework версии 4.7.2 и выше - riched20.dll прекрасно работает, в том числе поддерживает таблицы с многострочными ячейками и надобность в подключении библиотеки msftedit.dll отпадает. Кроме того, раньше была проблема скроллинга текста с позицией свыше 16 bit (свыше числа 65535). При получении (Get) позиции скроллбара через API функцию - она не могла превысить число 65535. При этом установка (Set) позиции свыше 65535 происходила нормально. Долго не мог въехать в этот глюк . При Net Framework версии 4.7.2 и выше Get и Set работают корректно.Что касается msftedit.dll, то проблема 16 bit имеется в Rich Text Edit Control версии ниже 7.5 (версия файла 6.3), это было еще при Windows 7. Для msftedit.dll версия Net Framework не играет роли. Теперь про скроллинг. Изучил три API функции получения/установки вертикальной позиции текста: Функция 1 (GetScrollPos) - не работает (выдает 0), если в текстовом окне вертикальный ScrollBar выключен Кликните здесь для просмотра всего текста
Функция 2 (SendMessage) - работает независимо от того, выключен или выключен вертикальный ScrollBar Кликните здесь для просмотра всего текста
Функция 3 (GetScrollInfo) - не работает (выдает 0), если в текстовом окне вертикальный ScrollBar выключен Кликните здесь для просмотра всего текста
Все функции показывают одинаковые значения скроллинга текста с учетом вышеописанной проблемы 16 bit. Для себя использую функцию 2, поскольку мне необходимо собственные ScrollBars текстового окна выключать. Максимальную позицию скроллинга текста (высоту текста) в текстовом окне можно отслеживать через событие ContentsResized: Кликните здесь для просмотра всего текста
По поводу проблемы 16 бит придумал такое решение: при загрузке приложения создавал текст высотой гарантировано больше числа 65535. Получал его позицию PosValue - если она была меньше 65535, значит контролл с глюком. Тогда при получении позиции пересчитывал число по формуле: Кликните здесь для просмотра всего текста
Повторюсь - установка (Set) позиции скроллинга работает нормально при любых версиях контролла и Net Framework.
2
|
||||||||||||||||||||||||||
|
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
|
||||||
| 02.03.2023, 01:03 | ||||||
|
Количество неудачных попыток запуска системы
Кликните здесь для просмотра всего текста
Краткое объяснение сего "феномена".
1
|
||||||
|
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
|
||||||
| 19.03.2023, 20:39 | ||||||
|
Диапазоны физической памяти, а также размер последней
Данные о физической памяти Windows хранит среди прочего в реестре. Код ниже эти данные разбирает (без объявления вспомогательных структур).
P.S. Если сложить все значения в колонке Size, получим истинный размер физической памяти системы.
1
|
||||||
|
7 / 7 / 0
Регистрация: 11.12.2022
Сообщений: 12
|
||||||
| 15.04.2023, 07:40 | ||||||
|
Изменение настроек печати с помощью диалогового окна функции DocumentProperties WinApi (winspool.drv)
В приложении должен быть экземпляр класса PrintDocument и кнопка ButtonPrinterSettings Этап 1 - подготовка текущих настроек печати приложения, которые будут переданы в окно DocumentProperties Используем метод PrintDocument.PrinterSettings.GetHdevmod e( PrintDocument.DefaultPageSettings), который создает дескриптор структуры DEVMODE, относящейся к настройкам печати PageSettings. Затем через WinApi функцию GlobalLock получаем указатель на блок неуправляемой памяти для структуры DEVMODE. Этап 2 - выделение блока неуправляемой памяти для настроек печати, которые будут получены из окна DocumentProperties Для этого обращаемся к функции DocumentProperties с параметром fMode=0 и получаем необходимый размер блока памяти. Далее с помощью метода Marshal.AllocHGlobal выделяем блок неуправляемой памяти заданного размера и получаем указатель на первый байт блока памяти. Этап 3 - вызов окна DocumentProperties с параметром fMode=14 (DM_IN_BUFFER or DM_OUT_BUFFER or DM_IN_PROMPT) передаем в окно данные по указателю pDevModeInput, получаем из окна данные по указателю pDevModeOutput. Этап 4 - сохранение измененных настроек печати в приложении с помощью метода PrintDocument.DefaultPageSettings.SetHde vmode. Далее разблокировка и освобождение неуправляемой памяти с помощью WinApi GlobalUnlock, GlobalFree, а также метода Marshal.FreeHGlobal. Cохранить измененных настроек печати можно двумя способами: PrintDocument.DefaultPageSettings.SetHde vmode - изменяются параметры страницы PrintDocument.PrinterSettings.SetHdevmod e - изменяются параметры принтера Особенности: - при объявлении DocumentProperties требуется маршалинг текстовой строки имени принтера <MarshalAs(UnmanagedType.LPTStr)> pDeviceName As String - DocumentProperties работает (Windows 7/10 64bit) без передачи дескриптора принтера hPrinter (если все же получить дескриптор необходимо - используйте WinApi OpenPrinter и ClosePrinter) Пример кода: Кликните здесь для просмотра всего текста
0
|
||||||
| 15.04.2023, 07:40 | |
|
Помогаю со студенческими работами здесь
20
Visual Basic .Net и Visual Basic 6.0 - В чём разница Готовые коды для решения лабораторных работ
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|