Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
16 / 0 / 0
Регистрация: 23.02.2019
Сообщений: 107

SplashScreen для WindowsForms

12.04.2019, 12:59. Показов 1405. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нашел на просторах код

C#
1
2
3
4
5
6
7
8
9
        [System.STAThreadAttribute()]
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public static void Main() {
            SplashScreen splashScreen = new SplashScreen("grimace.png");
            splashScreen.Show(true);
            WpfApplication1.App app = new WpfApplication1.App();
            app.InitializeComponent();
            app.Run();
        }
Как выяснилось, он работает лишь для WPF, возможно ли его добавить в WindowsForms?

Или придется делать костыль?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.04.2019, 12:59
Ответы с готовыми решениями:

Работа с GMap.WindowsForms. Нужны ресурсы, примеры
Народ, подскажите плиз, где можно глянуть какой нибудь мануал по GMaps. Какие методы,чё делают, ибо функций много, а как ими правильно...

Как запустить программу, написанную на Ассемблере из приложения WindowsForms?
Доброго времени суток! Имеется Windows-форма с кнопкой. Также имеется программа, написанная на ассемблере: org 100h MOV...

Создание Фильтров и Запросов в windowsForms для базы access
Доброго времени суток господа! "У меня есть мечта" - написать простую СУБД для access базы данных. Из функционала - добавление,...

14
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
12.04.2019, 16:33
Цитата Сообщение от Zeropil Посмотреть сообщение
Как выяснилось, он работает лишь для WPF, возможно ли его добавить в WindowsForms?
Читаем здесь
1
16 / 0 / 0
Регистрация: 23.02.2019
Сообщений: 107
12.04.2019, 17:59  [ТС]
Цитата Сообщение от Kazbek17 Посмотреть сообщение
Читаем здесь
Спасибо за попытку, но вопрос состоял в том, можно ли использовать "готовое", а все 4 метода, как бы намекают на то, что без танцев с бубном ничего не светит.

Скачал на 1 странице архив, но по предварительному анализу могу сказать, что оно того не стоит. Можно сделать проще.
0
Эксперт .NET
 Аватар для Rius
13092 / 7651 / 1672
Регистрация: 25.05.2015
Сообщений: 23,304
Записей в блоге: 14
12.04.2019, 19:15
Цитата Сообщение от Zeropil Посмотреть сообщение
без танцев с бубном ничего не светит
Это не танцы с бубном, а программирование.
Встроенного решения, из коробки, у C# + Windows Forms нет.
Цитата Сообщение от Zeropil Посмотреть сообщение
Можно сделать проще.
Покажите, как.
0
16 / 0 / 0
Регистрация: 23.02.2019
Сообщений: 107
12.04.2019, 22:07  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Покажите, как.
1) Можно наследовать от базового класса формы и отрендерить картинку непосредственно на нее. Про таймер и способы скрытия и говорить нечего.

2) Либо, написать свой класс, унаследованный от класса контрол.

На форме разместить 2 компонента
C#
1
System.Windows.Forms.Panel
На 1й мы ставим все компоненты управления что нам потребуются, и в свойствах видимости скрываем нашу панель.
На 2й мы размещаем наш класс, который мы сделали выше, и в свойствах видимости выставяем "видимый".

В момент запуска программы грузим форму, на которой видны лишь компоненты Panel2, как загрузка завершится, переключаем видимость на Panel1.

Чтобы это выглядело более красиво, в форме вписываем код
C#
1
2
3
4
5
            this.Opacity = 0.0;
            this.FormBorderStyle = FormBorderStyle.None;
            this.AllowTransparency = true;
            this.BackColor = Color.White;цвет фона  
            this.TransparencyKey = this.BackColor;
Чтобы сделать ее прозрачной, и у обоих свойств Panel ставим цвет равный TransparencyKey формы.

Теперь на форму можно загрузить картинку, которая будет оформлением. Картинка должна быть с прозрачностью (прозрачность должна быть на ненужных участках). А ее цвета не должны быть равны BackColor иначе они будут прозрачные.

Пока свойство
C#
1
this.Opacity = 0.0;
форма не видна, таймером прибавляем значение +0.1 до 1.0.
У меня 2 таймера, один делает видимой, 2й скрывает.

Чтобы графику применить к кнопкам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private void SetButton(Button button)
        {
            button.FlatAppearance.MouseDownBackColor =
                System.Drawing.Color.FromArgb(((int)(((byte)(128)))),
                ((int)(((byte)(0)))), ((int)(((byte)(128)))), ((int)(((byte)(0)))));
 
            button.FlatAppearance.MouseOverBackColor =
                System.Drawing.Color.FromArgb(((int)(((byte)(16)))),
                ((int)(((byte)(0)))), ((int)(((byte)(255)))), ((int)(((byte)(0)))));
 
            button.BackColor = System.Drawing.Color.Transparent;
            button.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
        }
Так выглядит форма


При загрузке нужно установить координаты обоих Panel в X= 0. Y= 0.
Так выглядит видимая панель 1
Название: у1.png
Просмотров: 62

Размер: 4.9 Кб
При переключении свойств меняю видимость панелей и компонентов.
Так видна панель 2 на рабочей форме.
Название: у2.png
Просмотров: 62

Размер: 4.1 Кб
0
Эксперт .NET
 Аватар для Rius
13092 / 7651 / 1672
Регистрация: 25.05.2015
Сообщений: 23,304
Записей в блоге: 14
12.04.2019, 22:14
1. Ещё ничего. Это один из этапов одного из способов создания заставок.
2. Костыль.

Не решён вопрос с подвисанием окон. При загрузке приложения его основной поток может полностью блокироваться и заставка в этот момент будет тупо висеть. Выглядит это как белый след от окна. Или белесое окно. С курсором ожидания.

Прозрачность ваша - не настоящая, см Создать окно нестандартной формы . По нормальному в Windows Forms её реализуют в первом варианте применением функции AlphaBlend из WinAPI.
0
16 / 0 / 0
Регистрация: 23.02.2019
Сообщений: 107
12.04.2019, 22:37  [ТС]
обе панели находятся в координатах 0,0 и имеют один размер, равный картинке формы, благодаря наследованию прозрачности мы не видим панели, но мы видим компоненты на них когда те видны.

Добавлено через 7 минут
Был
Цитата Сообщение от Rius Посмотреть сообщение
Прозрачность ваша - не настоящая
На VB был пример использования прозрачности через API, в одном из проектов использовал.

Цитата Сообщение от Rius Посмотреть сообщение
2. Костыль.
Может и костыль, но если все грамотно делать, то можно обойтись без привязок лишних библиотек. А как оптимизировать работу это вопрос уже другой.

Во всяком случае не на 6 классов проект для такой мелочи как заставка.

Добавлено через 9 минут
По поводу прозрачности, если ненужные пиксели закрасить "прозрачным" цветом (цвет, который указан в нашей программе как прозрачный) то только он будет невидим, оттенки будут игнорироваться. Отлично это делается в программе паинт. Либо указываем черный прозрачный цвет в другой программе.

Да, не любую картинку можно будет использовать. Но тут выбор или "задротить" вырисовывая пиксели или брать картинку хорошего качества и с прозрачным фоном.
0
Эксперт .NET
 Аватар для Rius
13092 / 7651 / 1672
Регистрация: 25.05.2015
Сообщений: 23,304
Записей в блоге: 14
12.04.2019, 22:44
Цитата Сообщение от Zeropil Посмотреть сообщение
По поводу прозрачности
... я объяснял в указанной теме. Всё не так просто, как кажется поначалу. Это не выбор поиска картинки, а выбор метода - или тяп-ляп и рваные края, или программирование на WinAPI и красивая заставка.
0
16 / 0 / 0
Регистрация: 23.02.2019
Сообщений: 107
13.04.2019, 05:51  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
или программирование на WinAPI и красивая заставка.
В игре Тера была красивая заставка, там картинку "правильно" нарисовали с каналом прозрачности в формате *.BMP и залили ее на SplashScreen. Размер картинки был более 800 х 800 и ни один пиксель не портил атмосферу.
Это была единственная заставка из тех что я видел в хорошем качестве.

Добавлено через 24 минуты
А если держаться темы заставки, то именно то, о чем мы говорим имеет небольшую картинку без канала прозрачности, которая висит на экране. Так что все средства хороши, если нам нужен квадрат.

Добавлено через 7 минут
Есть 2 вида графики векторная и растровая, и в растровой вы ни когда не получите сглаживание и четкие края. WPF этим и отличается, что все компоненты нарисованы именно с этим правилом.
Ну а во всех остальных случаях костыли в помощь, ведь перевести растровую графику в векторную без потери качества нельзя, а вот векторную растровую с потерей качества можно.

Добавлено через 4 минуты
Цитата Сообщение от Rius Посмотреть сообщение
Прозрачность ваша - не настоящая
Кстати, что имелось под этим? Возможность клацать мышкой насквозь через прозрачные части формы? Если это имелось ввиду, то можно.
0
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
13.04.2019, 11:09
я думаю что, ненужно изобретать велосипед, когда можно все это дело обойти с помощью WPF.
0
Эксперт .NET
 Аватар для Rius
13092 / 7651 / 1672
Регистрация: 25.05.2015
Сообщений: 23,304
Записей в блоге: 14
13.04.2019, 11:13
Красивая заставка в понимании кодинга это заставка с альфаканалом (прозрачности). Не однобитным, а с уровнями. Помимо Теры, есть и другие игры, где тоже так делают, и программы, например, продукты Adobe. Умение художника рисовать это уже другой вопрос.

Цитата Сообщение от Zeropil Посмотреть сообщение
имеет небольшую картинку без канала прозрачности, которая висит на экране. Так что все средства хороши, если нам нужен квадрат.
Если просто квадрат и без прозрачности, то да. Но это не слишком ли просто?

Цитата Сообщение от Zeropil Посмотреть сообщение
Есть 2 вида графики векторная и растровая, и в растровой вы ни когда не получите сглаживание и четкие края. WPF этим и отличается, что все компоненты нарисованы именно с этим правилом.
Ну а во всех остальных случаях костыли в помощь, ведь перевести растровую графику в векторную без потери качества нельзя, а вот векторную растровую с потерей качества можно.
В данном случае это не имеет никакого значения. Векторная графика хорошо масштабируется, а к заставке это отношения обычно не имеет. Экраны же у нас всё равно растровые.
Но можно нарисовать изображение с альфа-каналом и вывести его в качестве заставки. При правильном исполнении это позволяет отлично размывать границы между изображением и фоном.

Тянуть WPF в Windows Forms только для этого - перебор.
Миниатюры
SplashScreen для WindowsForms   SplashScreen для WindowsForms  
0
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
13.04.2019, 11:23
Цитата Сообщение от Rius Посмотреть сообщение
Тянуть WPF в Windows Forms только для этого - перебор.
Никто не говорит что из сплеша тянуть всю технологию. Человек хочет сделать из WF красочный софт, понимая что дальше лопаты и глины нечего не увидит. Только обвешивая все image-ми. Чтобы что-то сделать красивое нужно писать на WPF и рисуй знай что душе угодно.
1
16 / 0 / 0
Регистрация: 23.02.2019
Сообщений: 107
13.04.2019, 13:02  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Если просто квадрат и без прозрачности, то да. Но это не слишком ли просто?
Как бы, на повестке дня условие. Наша форма для SplashScreen не должна грузиться дольше формы основного приложения, а так же должна "кушать" минимум ресурсов.Иначе пропадает сам смысл ее создания. Иногда, чем проще, тем лучше.
0
Эксперт .NET
 Аватар для Rius
13092 / 7651 / 1672
Регистрация: 25.05.2015
Сообщений: 23,304
Записей в блоге: 14
13.04.2019, 13:06
Эти вопросы лежат в разных плоскостях.
Вы ещё забыли условие, что форма не должна подвисать при запуске основной программы.
0
16 / 0 / 0
Регистрация: 23.02.2019
Сообщений: 107
13.04.2019, 18:02  [ТС]
Кстати, есть предположительные "простые" картинки для этого? Хочу поэксперементировать с рендером, возможно получится сгладить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.04.2019, 18:02
Помогаю со студенческими работами здесь

WindowsForms
Здравствуйте! Есть таблица с полями дата, фио, зарплата. (дата может повторяться у одной и той же фио) например: дата фио ...

Подключение БД MS Access к проекту WindowsForms
Всем привет! Подскажите пожалуйста как указывать динамический/относительный/не явный (нужное и правильное подчеркнуть) путь для бд MS...

Передача данных от webforms к windowsforms
Привет всем! Извиняюсь, опыт программирования небольшой (46 лет, в относительно свободное время разбираюсь с программным решением...

Изображение для SplashScreen из внешнего файла
Возможно ли взять для SplashScreen изображение из внешнего файла, то есть, файла, который находится не в сборке, а где-то на диске?...

Добавление progressbar в SplashScreen
Нужен пример как сделать splashScreen из окна с подробным описанием кода


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru