VBNet.RU представляет новый компакт диск "VBNet CD 02 2004".
На диск помещены новые материалы:
Софт
.NET Framework 1.1
.NET Framework 1.2 Alpha
Декомпиляторы
Обфускаторы
Редакторы кода и среды разработки
Браузеры объектов
Автоматическое тестирование
XML-комментирование
И многое другое...
Сайты, рассылки, журналы - Популярные сайты, рассылки, электронные журналы о VB.
Сайт VBNet.Ru
Сайт Hypertech.Ru
И многое другое...
Коллекция компонент и DLL - Коллекция лицензионных ActiveX и .NET компонентов.
ComponentOne Studio .NET
SharpZipLib
FreeSMTP .NET
ChilkatDotNet
Контролы от Aspose
И многое другое...
Книги
Переход на VB .NET
Учебник по VB .NET
Microsoft ADO .Net Step By Step
Inside Csharp
Programming Microsoft .NET
И многое другое...
Справочники
Справочник по функциям Windows API
Microsoft Agent 2.0
Объектная модель FileSystemObject
Функции Windows API:Сообщения
Функции Visual Basic
И многое другое...
Эксклюзив
AddInTechonologySample - Пример реализации технологии подключаемых модулей (Add-in) в вашем .NET приложении.
FileSplitter - Приложение для разбития файла на части (и последующего соединения частей).
В этот раз не стану говорить о том, как вырос VBNet.Ru со времени выхода последнего CD :) Скажу только, что открылся новый раздел: VBA, весь сайт целиком теперь имеет размер 178 Мб, а форум, максимально сжатый архиватором 7Zip "весит" 50 Мб!
Кроме того, добавлен сайт нашего товарища Алексея Немиро Hypertech.ru.
В разделе Софт я решил представить полный набор софта для .NET программиста, разбитый на категории: декомпиляторы, обфускаторы, редакторы кода и среды разработки, браузеры объектов, автоматическое тестирование, XML-комментирование. Кроме того, на диске размещена альфа-версия .Net Framework 1.2!
В разделе Компоненты размещено 20 контролов и библиотек, среди которых вы безусловно найдёте что-нибудь полезное для себя. Большая часть компонентов распространяется как freeware, некоторые представлены с исходниками.
Полное содержание диска Вы можете скачать здесь.
Диск распространяется по почте наложенным платежом.
Цена: 60 рублей + 40 рублей (за почтовые расходы) = 100 рублей. Действует система скидок для постоянных клиентов.
Заказать диск можно здесь.
Я поставил на форму Tab Strip, сделал, чтобы он был с двумя вклаками и
все нормально, но я не могу разместить элементы на второй вкладке -
режиме редактирования нельзя ее активизировать. Т.е.,
полностью отображается только первая вкладка, на вторуя
перейти и разместить пару кнопок не получается. Что делать?
Ответ:
TabStrip- всего лишь полоска с закладками, они не
являются контейнерами и не могут держать на себе ничего. В МСДН-е
рекомендуют сделать несколько панелей и переключать их Visible в
зависимости от того, на какой вкладке в субже кликнули. Если не хочется
такого - пользуйся Microsoft Tabbed Dialog Control (надо
подключить в компонентах проекта). Страшный, но уж какой есть.
Вот, что сказано в МСДН:
The TabStrip control is not a container. To contain the actual pages
and their objects, you must use Frame controls or other containers
that match the size of the internal area which is shared by all Tab
objects in the control. If you use a control array for the container,
you can associate each item in the array with a specific Tab object,
as in the following example:
Option Explicit
Private mintCurFrame As Integer' Current Frame visible
Private Sub Tabstrip1_Click()
If Tabstrip1.SelectedItem.Index = mintCurFrame _
Then Exit Sub ' No need to change frame.
' Otherwise, hide old frame, show new.
Frame1(Tabstrip1.SelectedItem.Index).Visible = True
Frame1(mintCurFrame).Visible = False
' Set mintCurFrame to new value.
mintCurFrame = Tabstrip1.SelectedItem.Index
End Sub
Есть ряд значений (например 21, 3, 34, 28, 11... , всего значений
30-40).
Как случайным образом выбрать одно из этих значений? И как
определить, чётный номер
по счёту выпал, или нет? (в данной строке 21, 34, 11 - нечётные; 3, 28
- чётные)
Ответ:
Пусть n - количество значений. Сами числа запишим в одномерный массив
num(n). Нумерация начинается с нуля, поэтому первое число будет иметь
индекс 0, последнее - n-1.
В VB есть функция RND, при каждом вызове генерирующая случайное число на
интервале (0,1). И функция Int, возвращающая целую часть числа. Формула
из MSDN для генерации целого числа из диапазона:
Что нужно сделать, чтоб шрифты в VB отображались правильно?
Вопрос:
Как обычно запустил ВБ (ничего не трогал, не лазил в
настройки), ну и попробовал написать, например, вот так:
msgbox "Привет Рома"
а он пишет вместо кирилицы иероглифы. Но, после запуска
проги вискакивает нормальний MsgBox, причем в нем все
написано как надо!
Конечно можно переставить ВБ, но ведь это не выход.
Ответ:
Tools - Options - Editor Format - Font - Courier New Cyr
Maksim Knyshow
Это - проблема на ровном месте, созданная Microsoft. Просто VB по
умолчанию использует некириллический шрифт. Попробуй так: Tools ->
Options -> [Вторая вкладка]. Там будет списочек шрифтов. По умолчанию
стоит Courier. Я поставил Courier New и все заработало.
выскакивает ошибка 429 "ActiveX component cant create object".
На других компьютерах работает без проблемм. Подскажите, в чем причина, или какой компонент нужно установить.
Возникает проблема…, вернее нужно: считать все данные из файла и вывести их в PopupMenu, при этом каждая строчка в файле должна соответствовать одной строчке в меню. Задача состоит в том, чтобы при нажатии на строке в меню соответствующий текст появлялся в текстовом поле.
Сделал прогамму для работы с базой данных sql. Данные вывожу в форму в текстовые и др. поля. Проблемы с выводом отчета. Кто знает, можно ли использовать Data Report для вывода информации из текстовых полей, а не соединяться с базой данных через Data environment?
Ответы:
Вопрос:
Хочу попробовать сделать прогу для сына, что-то типа разукрашки картинок. Файлы элементарно скачиваются с детских сайтов. Сами файлы представляют из себя как бы черно-белый чертёж, т.е. только контуры предмета. Хотелось бы, чтобы ребёнок выбрав нужный цвет своей виртуальной кисточки и поднеся её к нужному участку "чертежа" и нажав кнопку мыши, залил выбранным цветом именно этот участок нашего "чертежа"... Что можете посоветовать?
' Наверно, это проще сделать через API, но API Viewer'a под рукой нет...
' Помниться, еще в GW Basic была функция Paint...
' Прошу учесть, что все это писалось в состоянии сильного алкогольного опьянения,
' так что за большой и медленный код прошу не ругать :)
'
' Я решил, что для ребенка лучше использовать метод "Карандашной заливки", т.е.
' заливка производится только в районе "доступности штриха", не перепрыгивая через контуры.
' Это, имхо, должно показать ребенку суть самого рисования.
' Если возникнут вопросы - пиши на мыло.
' Помести на форму объект PictureBox и дай ему название Picture1
' Установи у объекта Picture1 свойство ScaleMode=3 (Пиксель)
' Загрузи в Picture1 любой рисунок. Например Picture1.Picture=LoadPicture("C:\MyPic.bmp")
' BrushColor - цвет кисти (заливка)
' MaskColor - цвет контурных линий (чтобы случайно их не залить)
'
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Sub Paint(x, y, BrushColor, MaskColor)
PointColor = GetPixel(Picture1.hdc, x, y)
If PointColor = LineColor Then Exit Sub
For h = 1 To Picture1.Height
c = GetPixel(Picture1.hdc, x, y + h)
If c <> PointColor Then GoTo n
For i = 0 To Picture1.Width: c = GetPixel(Picture1.hdc, x + i, y + h): If c <> PointColor Then GoTo n1
If c = PointColor Or BrushColor Then Picture1.PSet (x + i, y + h), BrushColor
Next
n1: For i = 1 To Picture1.Width: c = GetPixel(Picture1.hdc, x - i, y + h): If c <> PointColor Then GoTo n2
If c = PointColor Or BrushColor Then Picture1.PSet (x - i, y + h), BrushColor
Next
n2: Next h
n: For h = 0 To Picture1.Height
c = GetPixel(Picture1.hdc, x, y - h)
If c <> PointColor Then GoTo nn
For i = 0 To Picture1.Width: c = GetPixel(Picture1.hdc, x + i, y - h): If c <> PointColor Then GoTo n3
If c = PointColor Or BrushColor Then Picture1.PSet (x + i, y - h), BrushColor
Next
n3: For i = 1 To Picture1.Width: c = GetPixel(Picture1.hdc, x - i, y - h): If c <> PointColor Then GoTo n4
If c = PointColor Or BrushColor Then Picture1.PSet (x - i, y - h), BrushColor
Next
n4: Next h
nn: End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Paint x, y, RGB(0, 140, 0), RGB(0, 0, 0)
End Sub
Public Declare Function ExtFloodFill Lib "gdi32.dll" (ByVal hdc As Long, ByVal nXStart As Long, ByVal nYStart As Long, ByVal crColor As Long, ByVal fuFillType As Long) As Long
' Константа нужная для заливки:
Public Const FLOODFILLSURFACE = 1
Примерчик:
Private Sub Form_Load()
Im.ScaleMode = vbPixels
Im.AutoRedraw = True
End Sub
Private Sub Im_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Im.Fillstyle="Shift"
Im.FillColor = Button * 1650 ' Это число я взял так, от фонаря...
ExtFloodFill Im.hdc, X, Y, Im.Point(X, Y), FLOODFILLSURFACE
End Sub
Попробуй пощёлкать разными кнопками, попробуй во время клика удерживать Alt, Ctrl...
Имеется в виду, что IM - PictureBox.
Вопрос:
Подскажите алгоритм перебора сочетаний из множества M по N элементов (без повторений). Пишу генератор ставок в лото 5 из 36.
Алгоритм писался из головы не в IDE, но должен работать.
public Mass(4) as byte
sub XXX()
dim i,j,k,l,m
dim Kol_vo as integer
dim MassStr as string
for i=1 to 36
for j=1 to 36
if Check(1,m) then mass(1)=j
for k=1 to 36
if Check(2,m) then mass(2)=k
for l=1 to 36
if Check(3,m) then mass(3)=l
for m=1 to 36
if Check(4,m) then mass(4)=m: Kol_vo=kol_vo+1: Massstr=Massstr & mass(0) & mass(1) & mass(2) & mass(3) & mass(4) & vbcrlf
next i
next j
next k
next l
next m
msgbox "Список всех " & Kol_vo & " решений" & vbcrlf & massstr
end sub
function Check(Index as byte, Value as byte) as boolean
dim ii as byte
for ii=0 to index-1
if mass(ii)=value then Check=false else Check=true: exit for
next ii
end function
Достаточно открыть справочник по математики Раздел "Комбинаторика". Там нужно использовать расчет факториала (n!). А потом пару-тройку раз умножение-деление.
Вопрос:
Как сделать так, чтобы данные считывались с файла не строками (input line), а весь текст сразу?
' Открытия файла для чтения информации в файле:
' Текст из файла записывается в переменную MyText
Open "C:\Sys.ini" For Input As #1
MyText = Input(FileLen("C:\Sys.ini"), #1)
Close
Private Sub Command1_Click()
Dim txt
Dim FN As Integer
FN = FreeFile
Dim FName As String
FName = "D:\1.txt"
'открыть файл
Open FName For Input As #FN
'присвоить переменной содержимое файла
txt = Input(LOF(FN), #FN)
'закрыть файл
Close #FN
'создать нулевой массив
Dim str1() As String
'создать отдельные элементы массива
'вместо постоянной vbCrLf можно использовать любой разделить
str1 = Split(txt, vbCrLf)
'перебор элементов массива идет от 0 до n-1
For i = 0 To UBound(str1()) - 1
'вот, собстенно, и проверка
MsgBox str1(i)
Next
End Sub
Вопрос:
Как определить, на каком диске хранится операционка?
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
hwnd=FindWindowEx(Me.hwnd, 0&, "_Класс_статусбара_", vbNullString)
_Класс_статусбара_ можно узнать через Spy++ (утилита в составе студии). Если класс находится внутри другого класса, то нужно так:
Всё это надо ручками прописывать. А лучше – мой Вам совет переходите на .NET – там и это делается элементарно (Anchor) да вообще всё намного качественнее получается.
Private Sub Form_Resize()
'Происходит при любом изменении размера формы.
On Error GoTo 1 'На случай, если размер формы очень маленький.
Text1.Width = Me.Width - a
Text1.Height = Me.Height - b
'Вместо a и b подставь нужные тебе числа.
'Учти, что a - длина отступа от Text1 слева + отступа справа.
'b - длина отступа от Text1 сверху + отступа снизу.
Exit Sub
1
End Sub