Author Archives: Tolik Punkoff
За кадром.
Или будни редакции.
Главред все переживал, не выглядит ли он на «свои почти 40 лет» и не сильно ли у него «насекомная (рептильная) мордочка», несмотря на все-таки серьезность акции и вполне ответственное, как наше всехное, так и его личное отношение. Не смог побороть глупую улыбку в камеру, как мы его просили.
«Ну не могу я, когда фоткают, не улыбаться, даже на загран 7 раз фотографировали», сказал редактор.
-А как ты, сишарпер хренов, по скайпу выступаешь.
-У меня камера хреновая, там хрен чо хрен разглядишь. И сишарп вообще не гадание на Таро, там лицо видеть не обязательно.
Ктулху с ним, как получилось, так и ладно.
БрокаЦентр
Нашли еще две темы. По-моему круто! Хотя мечтаю познакомить вас с их первым альбомом, на котором вполне себе панковский гражданско-оборонно-гаражный звук. Надеюсь, архивы Леши не оскудели, и в ближайшее время, таки да.
БрокаЦентр — СОН
БрокаЦентр — Терпи, ведь это любовь
Вторая песня, это заодно запоздалое поздравление с 8 марта всем парням, которым достались курицы или еще какие зверюшки, вместо женщин. Потому что их с 8 марта поздравлять и надо на самом деле. Такие тян, действительно, не нужны. Но многие парни, к сожалению, тетерева и фазаны, хотя думают, что львы.
Как-то так. Удачи!
BrokaCenter — INSIDE
Ну раз уж у нас сегодня вечер панковско-рокерских воспоминаний, навеянный приездом Леши, сегодняшним содержимым ленты, и вообще, каким-то анархическим настроением, то вот вам еще немного кондопожского панка.
Группа БрокаЦентр была в Кондопоге самой долгоиграющей, если исключить пипец какую древнюю группу «Всё» и Германа Фирсова, который вообще один из первых и старейших рок-музыкантов Карелии, России и СССР.
Больше БЦ на нас в нежном возрасте (включая половину ОИМ, и всю российскую часть редакции), наверное повлияли только LovinGod и группа Purgen.
Это одна из последних известных записей. Попробуем найти все и выложить в сеть. Даже введу новый тег.
Гаражный панк
Репетиция кондопожской группы «Позитив», 200█ год. Эх, как все было круто и мило, и отрываться можно было до утра, благо бешеный принтер еще не был настолько бешеным. Ну и Леше отдельное с кисточкой, хз в каких архивах откопавшему запись.
ГЕОРГИЕВСКАЯ ЧЛЕНТОЧКА
Уберите от экрана женщин, беременных детей и обязательно покажите ватникам!
Это меня так замечательно поздравили с 23 февраля. Такой вот дерьмоядреной бiмбой, способной порвать гигаватное количество пердаков!
Алсо, у нас была георгиевская туаленточка, она менее натуралистичная, но не менее разжигающая.
C# Перевод чисел между системами счисления стандартной функцией класса Convert
Да, совсем забыл выложить исходник, спасибо, что напомнили.
Перевести число в/из десятичной в 2, 8, и 16-ричную систему можно с помощью стандартной функции класса Convert
Convert.ToInt64(s, From)
s
— строка, содержащая число.
From
— основание системы счисления.
Обратное преобразование:
Convert.ToString(n, To)
n
— число
To
— основание системы счисления.
На выходе будет строка
В примере еще показал, как ограничить ввод в текстовое поле, чтоб можно было вводить только определенные символы, и добавил отображение символа по его коду (в однобайтной кодировке, для Unicode будет погода на Марсе). Числа можно вводить через пробел.
Иконка для своего приложения Windows. Стандартные размеры иконок
И как сделать ICO файл с несколькими изображениями
Спрашивали, как надо правильно делать иконку для своего Windows-приложения.
В первую очередь нужно ее нарисовать, либо найти изображение. Чем больше, тем лучше, поскольку для хорошей иконки потребуется несколько файлов разного размера.
Если изображение будет одно и маленькое, то иконка будет выглядеть некрасиво, пойдет квадратными пикселями.
То же самое касается и иконки для формы приложения, хотя на самой форме корректно будет отображаться и маленькая иконка 16×16 пикселей, при переключении по Alt+Tab уже будет заметно и некрасиво.
Рисовать, то лучше в каком-нибудь векторном редакторе, чтоб было потом проще создать несколько растровых изображений разных размеров. Мы, например, пользуемся Inkscape, он простой, бесплатный и для простых изображений вполне подойдет.
Еще момент — изображение должно, очевидно, быть квадратным.
Нарисовали, теперь нужно получить несколько изображений стандартных размеров:
— 16×16
— 32×32
— 48×48
— 256×256
Где-то читал рекомендацию, что нужен значок еще 128×128, но на практике пока не заметил, чтобы его наличие было критично.
Для Windows 7 и выше обязательно нужен значок 48×48
Обратите внимание, что размер значка рабочего стола по умолчанию в XP был 32×32, а в Windows 7 — 48×48
В значки для формы, а не для иконки экзешника, лучше не включать значок 256×256 в том случае, если приложение должно работать на XP.
В остальных случаях XP игнорирует значок 256×256, но ничего плохого при этом не происходит, а вот если такой значок используется для формы, то приложение может упасть.
Известно, что в одном файле ICO могут храниться несколько изображений разных размеров. Для сборки есть много приложений и онлайн-сервисов, но мы пользуемся простой бесплатной программкой icon sushi Копия
Пользоваться очень просто.
1. Открываем все нужные изображения
2. Выделяем их в окне программы:
3. Сохраняем иконку (File — Save as Multiple Icon)
ЗЫ. Чтоб два раза не вставать.
Кто-то просил картинки-кнопочки от XuliOrganizzer’а
Так Леша выложил картинки на Github
Текстовый редактор FOTON для DOS
Охрененная софтина была для 1989 года.
Макросы, возможность компиляции программ, не выходя из бассейна из редактора и множество передовых фишек для того времени.
А самое главное, в нем есть одна штука, которой до сей поры нет ни в одном более современном текстовом редакторе. Выделение прямоугольных блоков текста! Которые можно переносить, вставлять и т.д. Вот нет такого больше нигде и все, а надо иногда. Причем настолько надо, что периодически пользуюсь сим олдовым произведением программерского искусства. Хоть сам бери и пиши редактор с подобной функцией, блин.
UPD.
Есть, оказывается. Не знаю насчет vim и emacs, правда, но Notepad++ делает как надо. И Far (по Аlt+стрелки). А вот Студия делает, но не совсем так.
Его собственная внутренняя демка:
Colors. Утилита для подбора цвета фона и текста в Windows Forms
Опять студенты приходили, на этот раз с мелким заданием, перечислить все названия цветов в Windows Forms. Заодно уж сделал из этого задания утилитку, чтобы подбирать цвет символов на фоне в Windows Forms. Довел задание, так сказать, до логического конца. В общем, кто не успел сегодня на скайп-чатик, где я всякие мелочи объяснял и делал, ходите на Гитхаб, скачивайте там. Только не забудьте хоть что-нибудь переделать, а то преподы будут ругаться.
Принцип очень простой. Все названия цветов есть в перечислении KnownColor
, а в классе Enum
есть метод GetNames
, который позволяет получить строковый массив с именами элементов перечисления.
string[] ColorNames = Enum.GetNames(typeof(KnownColor));
Вытащить конкретное значение элемента перечисления по его имени (если оно в виде строки) можно с помощью Enum.Parse
KnownColor knownColor = (KnownColor)Enum.Parse(typeof(KnownColor), n);
n
— строковая переменная с именем.
Все остальное стандартно, заполняем в цикле GridView и красим ячейки.
Ну и в довесок в программе есть пример использования ColorDialog
и получение информации о выбранном в диалоге цвете.
И элемента управления TrackBar
для выбора цвета и фона по RGB.
Пользуйтесь на здоровье.
Исходник:
На Гитхабе
На Mega.NZ
Cкомпилированная программка
ЗЫ. Спасибо, Леха, огромное за наводку на GitEve, и удобно, можно всё мышей тыкать, не набивать километры команд в консоли, и идет на всех ОС. Все-таки с этим вашим гитом через консоль несколько неудобно работать, или я пока еще не привык.
Игра «Жизнь» на Turbo Pascal for DOS
От ведь блин, нашел лохматого возраста исходник игры «Жизнь». Писалось с другом на Turbo Pascal для DOS в лохматых годах, когда еще в школе учился.
Написано, конечно, криво, косо, неоптимизированно и все это жутко тормозит, особенно «редактирование» картинки. Но все равно круто, аж детство вспомнилось, когда не пил, не курил, мониторы были зеленее, компьютеры медленнее, Ельцин президент, а я хотел вступить в КПРФ.
https://youtu.be/W7VRyfoaOkg
Еще видео
Думал даже переписать сие произведение, Free Pascal вроде умеет в графику. Может и займусь, или найду еще более крутой исходник шизово-психоделических трехмерных графиков и сделаю из него заставку на Юнити, все равно давно хотел попробовать что-нибудь написать, чтоб с триде, да в голову ничего не приходило.
А гадский Ютуб почему-то пакостит в видео, во всяком случае, в эти. На локальной машине все четко видно, а публикуешь, как-то лажовенько выглядит, ерунда какая-то непонятная с ютубом.
Патчи от WannaCry, NotPetya и скрытых майнеров для Windows XP
Пришлось столкнуться, слава Ктулху не с самими вирями и майнерами, но с незаделанными дырками. Есть два пути обновить пожилую ОС, протестировать на наличие уязвимости Eternal Blue и заткнуть только ее, или сделать кумулятивное обновление.
Протестировать наличие дыры можно с помощью программы Eternal Blues. Пользоваться очень просто, вводим диапазон IP в локальной сети и жмем кнопку SCAN. Где в графе Vulnerable? указано YES, там дырка не заделана.
Заделываем
Качаем официальные патчи от MS
Устанавливаем, перезагружаемся, и проверяем результат программой Eternal Blues
Вот тут в прямом смысле слава Украине, а точнее конкретному украинцу под именем Simplix, который заботливо собрал все обновления со времен выхода SP3 в одну кучу, протестировал и выложил в одном пакете.
Скачать можно с его сайта simplix
Я поставил сразу тестовое обновление, но вы можете скачать то, которое уже полностью протестировано, хотя и тестовое вполне себе зашло. 5 машин и неделя времени, полет нормальный.
Установка детально описана на его же форуме.
Большой плюс для виндопользователей пиратской винды, если таковые найдутся :), после обновлений активация не слетает.
Eternal Blues
KB4012583 и KB4012598
UpdatePackLive-19.11.15 (если запускает пакет обновления с ключом /ie8, обновится IE до версии 8)
Подводный камень при чтении файла с помощью File.ReadAllText
Иногда проще прочитать файл, как текстовый в однобайтовой кодировке, чтобы что-нибудь там поделать с помощью стандартных string.Replace
/string.Remove
и т.д., иногда даже если файл не совсем текстовый, потому что таких же удобных функций для работы с массивом байт нет (или я не нашел).
Это, наверняка, адский быдлокод, но все-таки вполне альтернатива изобретению совсем уж дикого велосипеда.
А у меня речь шла о текстовых файлах, правда, неизвестно в какой кодировке, и символах, которые нужно искать/менять. Символы от кодировки не зависели, посему любой файл можно было рассматривать, как текстовый, в любой однобайтовой кодировке. Главное, в какой кодировке открыл, в той же потом и сохранить.
Так вот File.ReadAllText
пытается автоматически определить кодировку файла на основе наличия меток порядка следования байтов и принудительная установка кодировки не помогает. Если в файле встретился зловредный BOM, то ReadAllText
наплюет на твои указания кодировки с высокой колокольни и откроет в той, на которую ему BOM указывает, а при сохранении, соответственно, будет глюк и текст превратится в тыкву.
Беда, конечно, решается стандартно, чтением файла с помощью StreamReader
и записью с помощью StreamWriter
, которые себе такой самодеятельности не позволяют, но «осадочек остался».
Мухосранск. Говно. Тоскливо.
Мухосранск. Говно. Тоскливо.
Дети. Дом. Работа. Пиво.
Геморрой. Камаз. Гараж.
Десять лет водилой стаж.
Раз в пять лет с женой в кино.
Мухосранск. Тоска. Говно.
Водка. Патриот. Россия.
Шарфик красно-бело-синий.
Ящик. Киселёв на Первом.
Украина. Киев. Нервы.
Танцы. Шум. «Крымнаш». Веселье.
Утро. Санкции. Похмелье.
Цены. Доллар. Банк. Кредит.
Тёща как всегда нудит.
Снова Киселёв на Первом.
Водка. Вещмешок. Консервы.
Секс с женой как в первый раз.
Поезд. В путь. Спасать Донбасс.
Форма. Каска. Полигон.
Гумконвоем в Краснодон.
ЛНР. Блокпост. Укропы.
Первый бой. Три пули в жопе.
Страх. Обстрел. Осколок «Града».
Труп. Мешок. Рефрижератор.
Крест. Венок. Вдова. Плаксиво.
Мухосранск. Говно. Тоскливо.
Оператор наведения Дон Олесь
XuliOrganizzer. Простенький самописный органайзер на C#
Нет, оно не читается, как хули, органайзер. Но, может быть, что и подразумевается. 🙂
Это маленькая программа-органайзер для XP, 7, 8 и Vista. На 10 никто из нас ее запускать не пробовал, из за отсутствия таковой.
Что умеет:
— Собственно, напоминания по расписанию о событиях. Ну там кота покормить, или не забыть выключить самогонный аппарат, или продать славянский шкаф.
Возможны напоминания как в виде всплывающих подсказок в трее, так и в отдельном окне, повтор напоминаний через заданное время, звуковое оповещение.
Имеется возможность активировать/деактивировать задание-напоминание, есть контроль просроченных заданий и возможность немедленного выполнения таковых при старте программы.
— Запуск программ по расписанию, как с уведомлением, так и без.
— Симпатичный таймер обратного отсчета
— Текстовые заметки
Для заметок есть «корзина», т.е. случайно удаленную заметку можно восстановить.
Все данные хранятся в XML, в настройках можно посмотреть путь к файлу.
Писал в основном Леша, изредка виртуально пиная всех вокруг, и в основном для меня, потому что я давно хотел удовлетворяющий меня органайзер с напоминаниями, а в сети не было такого, который бы меня устраивал.
Распространяется свободно, как обычно, по лицензии Хекса.
Исходники:
Красотища
https://www.youtube.com/watch?v=lrx2Xa8X8h0
Теперь у меня появился третий любимый рекламный ролик. Первые два это «Вентиляторный завод» и реклама CISCO, где кошка, которая выпила все молоко.
C#. Windows Forms. Режим замены текста по нажатию клавиши Insert в TextBox.
То есть, задача сделать, чтоб было как в нормальном текстовом редакторе, нажимаем Ins, и символы перед курсором заменяются на введенные с клавиатуры. Нажимаем еще раз и символы вставляются как обычно.
Элемент управления TextBox
почему-то из коробки это не поддерживает, поддерживает MaskedTextBox
, но и стандартный TextBox
вполне можно допилить. Не знаю, почему на первых строках в поисковике какой-то ужас со StringBuilder
‘ами и чуть ли не вызовом WINAPI, хотя все гораздо проще.
Заводим в форме логическую переменную, которая будет отвечать за то, какой режим ввода сейчас true
— замена, false
— обычная вставка.
bool InsertMode = false;
В обработчик события KeyUp помещаем код, который будет менять флаг, если был нажата клавиша Insert:
private void txtTest_KeyUp(object sender, KeyEventArgs e) { if (e.KeyData == Keys.Insert) { InsertMode = !InsertMode; } }
В обработчике KeyPress
код следующий
private void txtTest_KeyPress(object sender, KeyPressEventArgs e) { //Вытаскиваю объект, который вызвал событие, //чтоб можно было подключить несколько TextBox'ов TextBox tb = (TextBox)sender; //если включен соотв. режим, курсор не в конце текста //и не нажата какая-либо управляющая клавиша //заменим символ перед курсором if (InsertMode && tb.SelectionStart < tb.TextLength && !Char.IsControl(e.KeyChar)) { //выделяем 1 символ перед курсором //область выделения автоматически заменится //символом, введенным с клавиатуры tb.SelectionLength = 1; //если выделен символ перевода строки, значит это конец строки //в multiline TextBox, if (tb.SelectedText == "\r" || tb.SelectedText == "\n") tb.SelectionLength = 0; //не надо ничего //заменять, убираем выделение } }
Вот. Комментарев больше кода 🙂
Можно сделать замену текста по кругу, т.е., когда дошли до последнего возможного символа, начинаем заменять с первого. Может пригодиться, если строка какая-то небольшая, например две цифры секунд, какой-нибудь код, почтовый индекс и т.д.
Надо всего лишь модифицировать первое условие, чтоб исключить проверку на длину строки и добавить проверку на TextBox.MaxLength
if (InsertMode && !Char.IsControl(e.KeyChar)) { //замена по кругу if (tb.SelectionStart == tb.MaxLength) tb.SelectionStart = 0; // [...] }
Достигли последнего возможного символа, перескочили в начало текстового поля.
C# Windows Forms. Изменение размеров формы без заголовка
Форму с FormBorderStyle
None
можно сделать такую, чтобы пользователь мог менять и ее размеры мышью, как у обычной формы:
Код под катом
Получаются такие вот симпатичные формочки:
Код на PasteBin
Проект
Неологизм от Гундяева
C# Windows Forms. Перетаскивание формы без границ. Перетаскивание формы не за заголовок.
Т.е. такой формы, у которой FormBorderStyle
установлен в None
Вариант 1, это прописать в обработчике MouseDown вот такой код:
base.Capture = false;
Message m = Message.Create(base.Handle, 0xa1, new IntPtr(2), IntPtr.Zero);
this.WndProc(ref m);
Вариант простой, форма будет перетаскиваться, как обычная форма, только за любую ее точку, а не за заголовок.
Вариант №2 вот такой:
Код под катом
Форма также перетаскивается за любую точку формы, но, нужно несколько обработчиков событий, при перетаскивании форма будет перерисовываться вся, а не как обычно, когда появляется только рамка перетаскивания, и к тому же форма чуть-чуть дернется в начале перетаскивания, после нажатия левой кнопки мыши. Но если надо, чтоб во время перетаскивания она вся перерисовывалась, то вариант использовать второй способ.