PDA

Показать полную графическую версию : Visual Basic 2008


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [15] 16 17 18

Admiral
04-10-2008, 20:04
У меня стоит Aero. »
Разработчики вдоль и поперёк написали все функции в своей оболочке. По этому добились таких результатов. Любое окно запущенное под данной оболочкой ищет системные библиотеки, а они уже переписаны и выходит они строятся по новым правилам.
За прозрачность отвечает Me.Opacity, значения от 0 до 1.
http://s41.radikal.ru/i091/0810/26/c623c3d03b7d.jpg

Uzvern
06-10-2008, 19:28
Вот пример : http://www.gotdotnet.ru/Forums/Windows/581428.aspx
А тут их куча, только с переводом траблы : http://weblogs.asp.net/kennykerr/archive/2006/08/10/Windows-Vista-for-Developers-_1320_-Part-3-_1320_-The-Desktop-Window-Manager.aspx

+ немогу добавить объект на прозрачную область. Нет, он добавляется, но некорректно.

Admiral
06-10-2008, 19:46
Uzvern, класные ссылки и примеры. :clapping:
Возможно глюки GDI+. Тут уже ничего не сделаешь, разве что свою реализацию писать.

Uzvern
06-10-2008, 19:51
Admiral, ни одного слова не понял, но спасибо.

Admiral
06-10-2008, 21:07
Uzvern, в приведённой статье сказано Therefore, if you are serious about transparency and translucency on Windows you need to use GDI+ (or some other graphics library). Before we look at GDI+ however, let us see what can be done with good old GDI. >> (http://weblogs.asp.net/kennykerr/archive/2006/08/10/Windows-Vista-for-Developers-_1320_-Part-3-_1320_-The-Desktop-Window-Manager.aspx)
то есть рассмотрен ранее вопрос с применением GDI+ или другой (в том числе и самостоятельной написанной). Так же указанно, что можно организовать и с помощью "старой доброй GDI".
Без кода по вопросу + немогу добавить объект на прозрачную область. Нет, он добавляется, но некорректно. » можно говорить только в общих чертах, ведь даже не указанна с помощью какой технологии (GDI, GDI+, etc) отрисована форма c объектом. Я высказал своё предположение, на случай если это GDI+, так как даже в базовых примерах бывают глюки отображения.

Codru
07-10-2008, 16:34
Помогите запустить следующую программу, находясь в документе Word. Заранее благодарю.
Option Explicit
Private Declare Function BeginPath Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function EndPath Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function PathToRegion Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Sub Form_Load()
Const TEXT = "Привет, я текст!"
Dim hRgn As Long
Font.Name = "Times New Roman"
Font.Bold = True
Font.Size = 70
Width = TextWidth(TEXT)
Height = TextHeight(TEXT)
BeginPath hdc
Print TEXT
EndPath hdc
hRgn = PathToRegion(hdc)
SetWindowRgn hWnd, hRgn, False
Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
End Sub

Delirium
08-10-2008, 01:21
Во первых, нет описания функций TextWidth, TextHeight. Во вторых, не совсем понятен смысл данного кода.

Codru
08-10-2008, 01:45
Delirium Нашел эту процедуру в И-нете "Вывод на экран текста, форма приобретает вид текста". Пытался ее вставлять в форму, но ее делит на процедуру (макрос), первую часть до "Private Sub..." отделяет. Не знаю как обьединить. Хотя и не уверен, но думаю, что фнкции TextWidth, TextHeight смогу расписать. Программированием уже лет 12-ть не занимался, хотя в VBA совсем иной принцип заложен.

Delirium
08-10-2008, 01:56
первую часть до "Private Sub..." отделяет »
Так и должно быть, в VBA option explicit означает определение глобальных переменных.
Private Sub Form_Load() »
Процедура вызывалась в Visual Basic (не VBA), и срабатывала при загрузке формы. В Word ее запустить не удастся.

Codru
08-10-2008, 02:22
Delirium , и что делать, ни как нельзя приспособить? вроде бы программа была расписана для VBA. Уж больно идея понравилась.
Идея в том, что хочу разместить рисунок и рядом с ним текст, который изменялся бы при выделении разных областей рисунка. Все это хочеться разместить просто на листе, либо на форме развернутой во весь экран.

Delirium
08-10-2008, 02:31
В смысле что то типа picker'а? Т.е. написал я текст, а потом ткнул мышкой, и текст стал цвета пикселя на картинке? Можешь пример хоть примерно нарисовать?

Uzvern
28-10-2008, 19:37
Помогите отловить сообщение Windows о подтверждении удаления файла/папки и нажать кнопку "Нет".

Delirium
29-10-2008, 01:38
Uzvern, а в когда оно появляется? Имеется в виду, в вашей программе или где? Это же по сути простой MessageBox с vbYesNo.

Uzvern
29-10-2008, 12:18
сообщение Windows »
Не в моей программе, а в самом Windows когда удаляешь какой - либо файл.

Delirium
30-10-2008, 02:22
хмм. а отслеживать необходимо через свою программу? Единственный вариант, который приходит в голову - отслеживать появление окон с заголовком "подтверждение удаления файла" и программно нажимать "нет". AutoIT работает по такому принципу.

Admiral
30-10-2008, 03:45
Uzvern, есть исходник на С++ http://ja.pastebin.ca/raw/890971
http://i061.radikal.ru/0810/ae/32cbe60f23e9.png,
а в теме есть примеры использования WinApi функций в VB.NET, которые присутствуют в данном C++ исходнике.
Данную защиту можно обойти использовав не Експлоре, например через FAR, TotalCommander и другие файловые менеджеры удалить файл всё же получится.

Uzvern
30-10-2008, 08:30
Admiral, а обход мне неочень интересен, т.к. человек все-равно до этого не додумается. Щас буду пробовать переводить код с С++ в VB :)

paul_p
03-11-2008, 17:57
Доброго времени суток, Уважаемые обитатели форума!
Я начал изучать VB совсем недавно, примерно 1,5 месяца назад.
Поиск на форуме мне к сожалению не помог, т.к. проблема видимо слишком простая и скорее всего не обсуждалась. А суть проблемы такова: нужно при нажатии кнопки Button2 сохранить данные из ListBox1в файл с расширением *.xls, ну или хотя бы в *.txt
На машине установлено:
Visual Studio 2008 Express, а в качестве офисного приложения OpenOffice 3.0 (MSOffice нет.)
Собственно, если нет прямой возможности сохранить в *.xls, текстовый файл вполне подойдет.

Вот текст приложения:

Public Class Form2

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

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'ЗАПОЛНЕНИЕ ФОРМЫ СИСТЕМНОГО БЛОКА
'Системный блок
ListBox1.Items.Add(GroupBox7.Text)
ListBox1.Items.Add(Label4.Text)
ListBox1.Items.Add(TextBox4.Text)
ListBox1.Items.Add(Label17.Text)
ListBox1.Items.Add(TextBox5.Text)
'Материнская плата
ListBox1.Items.Add(GroupBox1.Text)
ListBox1.Items.Add(Label5.Text)
ListBox1.Items.Add(ComboBox1.Text)
ListBox1.Items.Add(Label6.Text)
ListBox1.Items.Add(TextBox7.Text)
'Блок питания
ListBox1.Items.Add(GroupBox2.Text)
ListBox1.Items.Add(Label8.Text)
ListBox1.Items.Add(ComboBox2.Text)
ListBox1.Items.Add(Label7.Text)
ListBox1.Items.Add(TextBox9.Text)
'HDD
ListBox1.Items.Add(GroupBox3.Text)
ListBox1.Items.Add(Label10.Text)
ListBox1.Items.Add(ComboBox3.Text)
ListBox1.Items.Add(Label9.Text)
ListBox1.Items.Add(TextBox11.Text)
'FDD
ListBox1.Items.Add(GroupBox4.Text)
ListBox1.Items.Add(Label12.Text)
ListBox1.Items.Add(ComboBox4.Text)
ListBox1.Items.Add(Label11.Text)
ListBox1.Items.Add(TextBox13.Text)
'DVD
ListBox1.Items.Add(GroupBox5.Text)
ListBox1.Items.Add(Label14.Text)
ListBox1.Items.Add(ComboBox5.Text)
ListBox1.Items.Add(Label13.Text)
ListBox1.Items.Add(TextBox15.Text)
'Сетевая карта
ListBox1.Items.Add(GroupBox6.Text)
ListBox1.Items.Add(Label16.Text)
ListBox1.Items.Add(ComboBox6.Text)
ListBox1.Items.Add(Label15.Text)
ListBox1.Items.Add(TextBox17.Text)
'Видеокарта
ListBox1.Items.Add(GroupBox7.Text)
ListBox1.Items.Add(Label18.Text)
ListBox1.Items.Add(ComboBox7.Text)
ListBox1.Items.Add(Label19.Text)
ListBox1.Items.Add(TextBox19.Text)
'Очистка заполненных строк
TextBox4.Clear()
TextBox5.Clear()
TextBox7.Clear()
TextBox9.Clear()
TextBox11.Clear()
TextBox13.Clear()
TextBox15.Clear()
TextBox17.Clear()
TextBox19.Clear()

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Заполнение формы заказа
ListBox1.Items.Add(Label1.Text)
ListBox1.Items.Add(TextBox1.Text)
ListBox1.Items.Add(Label2.Text)
ListBox1.Items.Add(TextBox2.Text)
ListBox1.Items.Add(Label3.Text)
ListBox1.Items.Add(TextBox3.Text)
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

End Sub

Private Sub SaveFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk

End Sub

Private Sub GroupBox8_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox8.Enter

End Sub
End Class

Спасибо.

Admiral
04-11-2008, 04:22
paul_p, приветствую.
нужно при нажатии кнопки Button2 сохранить данные из ListBox1в файл с расширением *.xls»
на первый взгляд, если установка Excel не предусмотрена, всё вроде просто Creating an Excel spreadsheet XLS file direct from your .Net app with SpeadsheetGear (http://www.devdirect.com/ALL/spreadsheetgearfornet_SOLN_00010012.aspx) да вот только SpeadsheetGear стоит денег :(
ну или хотя бы в *.txt »
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim File As Integer = FreeFile()
FileOpen(File, "MyFile.txt", OpenMode.Append)
For i As Integer = 0 To ListBox1.Items.Count - 1
PrintLine(File, ListBox1.Items.Item(i))
Next i
FileClose(File)
End Sub
в теме уже было рассказано про сохранение в файл.

А компоненты GroupBox1, GroupBox2, .., GroupBox7, TextBox, Label1, Label2, .., Label19, TextBox1, TextBox2, .., TextBox19 нужны именно в таком количестве?

Между прочим код можно немного преобразовать с помощью операторов With и End With что уже было показано (http://forum.oszone.net/post-836663.html#post836663) в теме


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'ЗАПОЛНЕНИЕ ФОРМЫ СИСТЕМНОГО БЛОКА
'Системный блок
With ListBox1.Items

.Add(GroupBox7.Text)
.Add(Label4.Text)
.Add(TextBox4.Text)
.Add(Label17.Text)
.Add(TextBox5.Text)
'Материнская плата
.Add(GroupBox1.Text)
.Add(Label5.Text)
.Add(ComboBox1.Text)
.Add(Label6.Text)
.Add(TextBox7.Text)
'Блок питания
.Add(GroupBox2.Text)
.Add(Label8.Text)
.Add(ComboBox2.Text)
.Add(Label7.Text)
.Add(TextBox9.Text)
'HDD
.Add(GroupBox3.Text)
.Add(Label10.Text)
.Add(ComboBox3.Text)
.Add(Label9.Text)
.Add(TextBox11.Text)
'FDD
.Add(GroupBox4.Text)
.Add(Label12.Text)
.Add(ComboBox4.Text)
.Add(Label11.Text)
.Add(TextBox13.Text)
'DVD
.Add(GroupBox5.Text)
.Add(Label14.Text)
.Add(ComboBox5.Text)
.Add(Label13.Text)
.Add(TextBox15.Text)
'Сетевая карта
.Add(GroupBox6.Text)
.Add(Label16.Text)
.Add(ComboBox6.Text)
.Add(Label15.Text)
.Add(TextBox17.Text)
'Видеокарта
.Add(GroupBox7.Text)
.Add(Label18.Text)
.Add(ComboBox7.Text)
.Add(Label19.Text)
.Add(TextBox19.Text)
'Очистка заполненных строк
End With
'...
End Sub
'...
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Заполнение формы заказа
With ListBox1.Items
.Add(Label1.Text)
.Add(TextBox1.Text)
.Add(Label2.Text)
.Add(TextBox2.Text)
.Add(Label3.Text)
.Add(TextBox3.Text)
End With

End Sub


На форуме код рекомендуется помещать между тегами 'здесь код (http://forum.oszone.net/misc.php?do=bbcode#code) http://forum.oszone.net/images/editor/code.gif.

paul_p
04-11-2008, 11:20
Admiral! Большое спасибо!
По всей видимости, я не совсем корректно воспользовался сервисом поиска (учту на будущее)
Тегом "code" тоже буду пользоваться обязательно, действительно удобно отделять код от текста.
Что же касается большого количества TextBox, то это обусловлено самой формой. Дело в том, что тот кто будет заполнять форму должен видеть все поля сразу, т.к. приходится их заполнять одновременно. А выбирать пункт из меню менее удобно, чем заполнять видимый.
Данная форма предназначена для многократного заполнения однотипной информации: №системного блока, серийный номер материнской платы и.т.д...

Немного доработал код сохранения в файл. Вот что получилось:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

SaveFileDialog1.Filter = "Текстовые файлы (*.txt)|*.txt"
SaveFileDialog1.ShowDialog()
If SaveFileDialog1.FileName <> "" Then
FileOpen(1, SaveFileDialog1.FileName, OpenMode.Output)
For i As Integer = 0 To ListBox1.Items.Count - 1
PrintLine(1, ListBox1.Items.Item(i)) 'копируем текст на диск
Next i
FileClose(1)
End If

End Sub




© OSzone.net 2001-2012