Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как написать текст поверх всех окон 
:(
    Опции темы
vladd
Дата 24.5.2012, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Здравствуйте!
Возник такой вопрос. Как написать текст поверх всех окон? Что то на подобии как  делает Mega Motivator. 
PM MAIL   Вверх
diadiavova
Дата 24.5.2012, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Не очень понятно, что это значит. В принципе текст надо писать в отдельном окне, задай ему TransparencyKey такой же, как цвет окна, убери все границы ( смотри свойство BorderStyle), растяни окно на весь экран и установи TopMost в true. Это все примерно, поскольку точно не помню, но думаю куда копать ты понял.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vladd
Дата 24.5.2012, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



На с# нашел такой код
Код

 using System.Drawing.Drawing2D;
    using System.Threading;
 
    public partial class Form1 : Form
    {
         int i = 0;
         string PATH_STRING ;
        const int FONT_SIZE = 100;
        const FontStyle FONT_STYLE = FontStyle.Bold;
         SizeF stringSize;
        Timer stateTimer;   
        public Form1()
        {
            InitializeComponent();
 
           
            this.TopMost = true;
            // здесь интервал таймера 100 мс
            stateTimer = new Timer(delegate { myMethod(); }, null, 0, 100);
 
        }
 
        void myMethod()
        {
            // вот здесь устанавливай нужное значение строки
            PATH_STRING = String.Format("{0:d4}", i);
            ++i;
 
            //Получаем оконные координаты верхней левой точки клиентской области
            Point origin = new Point(SystemInformation.Border3DSize.Width, SystemInformation.CaptionHeight);
            //При помощи GraphicsPath создаем Region в виде строки
            GraphicsPath path = new GraphicsPath();
           
            path.AddString(PATH_STRING, Font.FontFamily, (int)FONT_STYLE, FONT_SIZE, origin, StringFormat.GenericDefault);
            this.BeginInvoke(new Action(() =>
                {
                    //Устанавливаем регион для формы
                    Region = new Region(path);
                    //Вычисляем размеры прямоугольника, занимаемого строкой
                    stringSize = CreateGraphics().MeasureString(PATH_STRING, new Font(Font.FontFamily, FONT_SIZE, FONT_STYLE));
                    Width = (int)Math.Ceiling(stringSize.Width);
                }));
           
            
        }
        protected override void OnPaint(PaintEventArgs e)
        {           
 
            LinearGradientBrush brush = new LinearGradientBrush(ClientRectangle, Color.Yellow, Color.Blue, 10);
            e.Graphics.FillRectangle(brush, 0, 0, stringSize.Width, stringSize.Height);
        }
 
        //Чтобы наше окно можно было "тягать" мышью, "скажем" системе что вся его область является заголовком,
        //захватив который, как известно, можно перемещать окно
        const int WM_NCHITTEST = 0x0084;
        const int HTCAPTION = 2;
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_NCHITTEST)
            {
                m.Result = (IntPtr)HTCAPTION;
                return;
            }
            base.WndProc(ref m);
        }
    }


Теперь перевести его на VB net, да знаний не хватает.

Добавлено через 13 минут и 6 секунд
Так например ошибка на строку 11
Код

Timer stateTimer; 


Пишет что "Timer" - неоднозначная ссылка между "System.Windows.Forms.Timer" и "System.Threading.Timer". А как её исправить знаний и не хватает.
PM MAIL   Вверх
diadiavova
Дата 24.5.2012, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(vladd @  24.5.2012,  13:37 Найти цитируемый пост)
Пишет что "Timer" - неоднозначная ссылка между "System.Windows.Forms.Timer" и "System.Threading.Timer". А как её исправить знаний и не хватает. 

В твоем случае это первый вариант. Просто напиши имя класса полностью System.Threading.Timer

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


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vladd
Дата 24.5.2012, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Я просто хочу сначала понять как вообще люди решают подобные задачи на примере, а потом уже сделать свою.
Цитата(diadiavova @ 24.5.2012,  12:29)
Не очень понятно, что это значит. В принципе текст надо писать в отдельном окне, задай ему TransparencyKey такой же, как цвет окна, убери все границы ( смотри свойство BorderStyle), растяни окно на весь экран и установи TopMost в true. Это все примерно, поскольку точно не помню, но думаю куда копать ты понял.

А по вашему предложению надо сделать сначало MDI форму. Сделать её прозрачной и писать в неё текст. Я все правильно понял? 
PM MAIL   Вверх
diadiavova
Дата 24.5.2012, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(vladd @  24.5.2012,  17:23 Найти цитируемый пост)
А по вашему предложению надо сделать сначало MDI форму. Сделать её прозрачной и писать в неё текст. Я все правильно понял?  

Я об мди ничего не говорил. Обычная форма, без бортов, которой задается ключ прозрачности такой же как и цвет формы, благодаря этому сама форма будет не видна, а ее содержимое появится вместо нее. Растяни форму на весь экран и поверх всех окон, вот и будет то, о чем ты написал. Если я правильно понял, конечно, что это значит. А с какого боку там таймер, я вообще не понял. Таймер выполняет какой-либо метод через определенные интервалы времени и при чем тут он - непонятно.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vladd
Дата 24.5.2012, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Timer нужен для создания эффекта 25 кадра. Чтобы надпись показывать через настраиваемое определенное количество времени и определенной  длительности.
PM MAIL   Вверх
diadiavova
Дата 24.5.2012, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



25-й кадр - бред. Бросай это дело smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vladd
Дата 25.5.2012, 05:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Цитата(diadiavova @ 24.5.2012,  20:47)
25-й кадр - бред. Бросай это дело smile

Вот и хочу проверить сам. 
PM MAIL   Вверх
irinazanuda
Дата 28.5.2012, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 911
Регистрация: 23.6.2010

Репутация: 1
Всего: 18




Модератор: Сообщение скрыто.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.