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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамический рабочий стол 
V
    Опции темы
piadmin
Дата 19.12.2005, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет всем.
Такая проблема: хочу на рабочем столе в виде фона (поверх фона рабочего стола) отображать ряд параметров. Параметры должны периодически обновляться...

Как это сделать? Нашел в инете ссылку как это делается через Delfi

http://www.delphimaster.ru/articles/directx/index.html

И никак не найду, как сделать в VB...
Помогите smile
PM MAIL   Вверх
Exception
Дата 19.12.2005, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Создай полупрозрачное окно с позицией поверх десктопа..
PM   Вверх
Гость_piadmin
Дата 20.12.2005, 10:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











В этом случае по нему можно будет клацнуть мышкой и выбрать... разве нет?
Не хотелось этого. smile
  Вверх
Гость_Папа
Дата 21.12.2005, 01:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











piadmin
Привет.
Посмотри следующую инфу.
Может пригодиться.
Ситуэйшен: На форме только picturebox и все.
Сама форма не видима и не кликабельна. Кликаешь по картинке, усе закрывается.
Что интересно для тебя. Тут есть решение скрыть саму форму. А элементы на форме будут видны. Если изменить свойство контрола Enable с True на False то, он видим но не кликабелен. Я правда не проверял будут ли к примеру тулбары отражать измениение значений в этом случае? Попробуй сам.
Не знаю как тут можно выложить файл. Приведу код формы, разберешся. А так могу выслать ZIP с проектом на VB.NET(2003).
Код



Option Explicit On 
Option Strict On

Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        PictureBox1.Top = 0
        PictureBox1.Left = 0
        PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize
        PictureBox1.Image = (Image.FromFile("gin.bmp"))

        Me.BackColor = Color.Magenta          'если указать одинаково свойство magenta в BackColor и в TransparencyKey то
        Me.TransparencyKey = Color.Magenta    'фон формы делается  прозрачным
        Me.FormBorderStyle = FormBorderStyle.None  ' в этом случае не отображается тительбалк и границы формы.    
    End Sub

    Private Sub PictureBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
        Me.Close()
    End Sub
    'ниже приведен код для перетаскивания формы при нажатии левой кнопки мыши в любом месте формы, а не только в тительбалк
    'декларируем переменную нажатой кнопки мыши, исходное состояние кнопка не нажата
    'декларируем переменную содержащую координаты курсора мыши
    Private IsMouseDown As Boolean = False
    Private MouseOffset As Point
    'суб обработки события нажатия левой кнопки мыши
    'если нажата левая кнопка, то переменная кнопка нажата =true и мы получаем координаты курсора мыши
    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
        If e.Button = MouseButtons.Left Then
            IsMouseDown = True
            MouseOffset.X = e.X
            MouseOffset.Y = e.Y
        End If
    End Sub

    'суб нужен для определения события отпускания нажатой левой кнопки иначе курсор залипнет на форме
    Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
        IsMouseDown = False
    End Sub

    'этот обработчик события перемещения курсора мыши дает нам новые координаты формы, которые вступают в силу после отпускания кнопки.
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        If IsMouseDown Then
            Me.Location = New Point(Me.Location.X + e.X - MouseOffset.X, Me.Location.Y + e.Y - MouseOffset.Y)
        End If
    End Sub

    'ниже аналогичный код перемещать пикчербокс

    'Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
    '    If e.Button = MouseButtons.Left Then
    '        IsMouseDown = True
    '        MouseOffset.X = e.X
    '        MouseOffset.Y = e.Y
    '    End If
    'End Sub

    'Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
    '    If IsMouseDown Then
    '        Me.Location = New Point( _
    '            Me.Location.X + e.X - MouseOffset.X, _
    '            Me.Location.Y + e.Y - MouseOffset.Y)
    '    End If
    'End Sub

End Class


В принципе тебе нужен кусок кода в Sub Form_Load(), где делаем саму форму прозрачной. Остальное так для перетаскивания, если можно кликать.

И как советовали свойство формы TopMost устанавливай True, тогда форма будет поверх всех окон.


Желаю удачи.

ЗЫ.Самого тоже заинтересовало, на каникулах буду что-то пробовать сделать.
  Вверх
arilou
Дата 21.12.2005, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



piadmin
На десктопе можно рисовать. Попробуй заюзать API ф-цию GetDesktopWindow(). Она тебе вернет HWND, из которого можно будет создать объект Graphics и рисовать на desktop'е.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Varlok9000
Дата 11.2.2006, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



arilou, а код можно вывисеть а я как то уже замучался!!! вроде как находил как это сделать не работало говорила арифмитическия ошибка и усе!!! smile
буду очень благодарен!!!
PM MAIL   Вверх
Exception
Дата 12.2.2006, 03:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Varlok9000, приветствую на форуме!
Где именно возникает проблема? Объявление функции GetDesktopWindow выглядит так:
Код
Private Declare Auto Function GetDesktopWindow Lib "user32" () As Integer
. Получить объект Graphics можно так:
Код

Imports System.Drawing
'---
Dim hDesktop As Integer = GetDesktopWindow()
Dim g As Graphics = Graphics.FromHwnd(New IntPtr(hDesktop)
. Ну а далее вытворяй с этим g, что пожелаешь smile
P.S. Код отредактировал..

Это сообщение отредактировал(а) Exception - 12.2.2006, 22:17
PM   Вверх
Varlok9000
Дата 12.2.2006, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Exception,
А ты уверен что это работает!?
у меня он матерится на hDesktop говорит не могу преоброзовать в intPrt
PM MAIL   Вверх
Varlok9000
Дата 12.2.2006, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вот так все работет

Код

Dim gr As Graphics = Graphics.FromHdc(New IntPtr(GetWindowDC(GetDesktopWindow())))


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

PM MAIL   Вверх
Exception
Дата 12.2.2006, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Насчет кода: у тебя проделана одна лишняя операция, надо так:
Код
Dim g As Graphics = Graphics.FromHwnd(New IntPtr(GetDesktopWindow()))
. Я подправил код.
Насчет "поверх всего": сейчас проверить не могу, можешь привести скриншот, что именно не нравится smile ?
PM   Вверх
Exception
Дата 13.2.2006, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Хм. Ты имеешь в виду - под ярлыками? Щас подумаю.. Но сомневаюсь, что это возможно.
PM   Вверх
Exception
Дата 13.2.2006, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А если написать
Код
Dim g As Graphics = Graphics.FromHwnd(New IntPtr(0))
? По идее, должно сработать.
PM   Вверх
arilou
Дата 13.2.2006, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



Цитата(Exception @ 13.2.2006, 01:10 Найти цитируемый пост)
Graphics.FromHwnd(New IntPtr(0))

Только под Windows 98. Под NT платформой не гарантируется, что HDC Desktop'а будет 0.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Varlok9000
Дата 13.2.2006, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вот и именно не работаел ладно с этим понятно что ничего не получиться а как с картинку рабочего стола сначало дернуть а потом обратно вернуть!? smile
PM MAIL   Вверх
Exception
Дата 13.2.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Varlok9000 @ 13.2.2006, 21:46 Найти цитируемый пост)
а как с картинку рабочего стола сначало дернуть а потом обратно вернуть!?

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

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

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


 




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


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

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