← Январь 2003 → | ||||||
1
|
2
|
4
|
5
|
|||
---|---|---|---|---|---|---|
7
|
8
|
9
|
11
|
12
|
||
14
|
15
|
16
|
18
|
19
|
||
21
|
22
|
23
|
25
|
26
|
||
28
|
29
|
30
|
31
|
За последние 60 дней ни разу не выходила
Сайт рассылки:
http://vbnet.ru
Открыта:
31-07-2001
Статистика
0 за неделю
Visual Basic: новости сайтов, советы, примеры кодов. Выпуск 127.
Информационный Канал Subscribe.Ru |
Visual Basic: новости сайтов, советы, примеры кодов.
Выпуск 127.
VBNet
VBMania
Голосование: Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом. Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Новый выпуск рассылки! На мой призыв о кодах для рассылки откликнулись всего 2 человека. Хотя на рассылку подписано больше 6000 человек...
Обязательно зайдите на сайт VBNet.Ru и почитайте статьи, участвующие в конкурсе (их уже 4 штуки) и не забудьте проголосовать! Читайте! Содержание выпуска
Книги
Остальные книги о VB можно найти здесь. наверх Проверить тип вводимой информации Простая проверка регистра, буква или цифра,используя API Добавьте TextBox на форму
Как реализовать режим замены в текстовом окне Как вы знаете текстовые окна работают в режиме вставки. Данный пример покажет, как можно реализовать режим замены. Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii >= 32 Then 'проверка, что вводится символ (буква или цифра) If Text1.SelLength = 0 Then 'проверка, что текст не выделен If Text1.SelStart < Len(Text1) Then Text1.SelLength = 1 'данным установлением включается режим замены End If End If End If End Sub наверх Как быстро выделить текст для события GotFocus При вводе данных часто бывает необходимо выделить текущее значение элемента управления, когда в него передается фокус. Это позволяет пользователю немедленно начать ввод данных поверх предыдущего значения. Ниже приводится небольшая подпрограмма, которая предназначена именно для такой цели: Public Sub FocusMe(ctlName as Control) With ctlName .selStart = 0 .selLength = Len (ctlName) End With End Sub 'А теперь добавьте вызов к этой подпрограмме в событии GotFocus для тех элементов управления, которые используются при вводе данных: Private Sub Call FocusMe(Text1) End Sub 'ИЛИ... Text1.SetFocus 'ИЛИ... Private Sub Text1_GotFocus() 'ИЛИ... Private Sub Text1_GotFocus() Как уместить в Text Box больше 64 kb текста? Дело в том, что элемент TextBox не может показывать текст объемом больше 64 kb (а иногда это значение может сократиться до 30 kb). Но эту проблему легко решить, если подгружать необходимые куски текста в TextBox по мере надобности. Данный код загружает файл любого размера в динамический массив и в зависимости от значения Value Scrool Bar'а показывает в TextBox'e, только определенные куски текста. Для того, что бы все это работало, вам нужно поместить на форму TextBox, назвать его txtMain, установить его свойство Multiline как True, а свойство ScroolBars, как 1-Horizontal. А также рядом с TextBox'ом нарисовать вертикальный ScroolBar с именем vsbText Private Text() Private Const LineNum = 15 Private Sub Form_Load() Dim i Open "D:\win32api.txt" For Input As #1 Len = 1024 Do Until EOF(1) i = i + 1 ReDim Preserve Text(i + LineNum) Line Input #1, Text(i) Loop Close #1 With vsbText .Min = 1 .Max = i .SmallChange = 1 .LargeChange = i \ 10 End With End Sub Private Sub vsbText_Change() Dim i As Integer Dim Temp For i = vsbText.Value To vsbText.Value + LineNum Temp = Temp + Text(i) + vbCrLf Next i txtMain.Text = Temp End Sub наверх Определить количество строк в TextBox'е Добавьте TextBox (установите значение MultiLine=True) и CommandButton. Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Const EM_GETLINECOUNT = &HBA Private Sub Command1_Click() Dim lngLineCount As Long On Error Resume Next lngLineCount = SendMessageLong(Text1.hwnd, EM_GETLINECOUNT, 0&, 0&) MsgBox lngLineCount End Sub наверх Скрыть/показать мигающий курсор в Text Box Добавьте TextBox и CheckBox на форму Private Declare Function HideCaret Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function ShowCaret& Lib "user32" (ByVal hwnd As Long) Private Sub CheckCaret() If Check1.Value = vbChecked Then ShowCaret (Text1.hwnd) Else HideCaret (Text1.hwnd) End If End Sub Private Sub Form_Load() Check1.Value = 1 End Sub Private Sub Text1_Change() CheckCaret End Sub Private Sub Text1_GotFocus() CheckCaret End Sub наверх Мои программы BalloonMessage for MS Agent BalloonMessage for Microsoft Agent реализует диалог программы с
пользователем, используя при этом технологию Microsoft Agent. OCX реализует три
типа диалоговых окон: InputBox, MsgBox и MsgLabels. Автора: Шатрыкин Иван и Павел Сурменок. наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Автор вопроса: Admin Ответ ожидается по этому адресу Каким образом можно узнать информацию о файле, точнее *.avi, нужно длительность, размеры, и т.п. Автор вопроса: Dr.Max Ответ ожидается по этому адресу Пишу несчасное подобие броузера. Хочу добавить опции ,запрещающие загрузку файлов с определенным разрешением. Например,запретить загруску фоновой музыки сайта - *.mid;*.wav, запретить загруску некоторой графики - *.swf. Кто знает как??? Автор вопроса: Alexbor Ответ ожидается по этому адресу 1.Мне необходимо получить список всех зарегестрированных на машине серверов, а потом прочитать список их System DSN для каждого сервера. Как это можно сделать? 2. Для того чтобы исключить программу из диспетчера задач по Ctrl-Alt-Del я использую функцию RegisterServiceProcess. Под 95 виндами все работает шикарно, но на Windows 2000 Server (SP2), на ней прога ругается и говорит, что ссылку на данную функцию в kernel32 она не находит. В чем может быть дело? Если кто сталкивался с такой байдой буду признателен за совет. Автор вопроса: Tank Ответ ожидается по этому адресу Помогите решить задачу по получению данных с удаленных веб-сайтов. На сколько я понял стандартное решение это Microsoft Internet Controls (SHDOCVW.DLL), открываем Explorer: Set IE = New InternetExplorer... это все понятно, а как получить данные от Explorer открытого не программой или от нескольких открытых страниц, есть ли функция возвращающая количество IE и переключения между ними или подскажите другие методы. Автор вопроса: B. Obukhov Ответ ожидается по этому адресу Как в центре MDI формы написать какой-то текст? Ответы: Вопрос: А возможно ли закрыть из VB окно сеанса ДОС? Ответ: Автор ответа: Шишкалов Д.Ю. 1)..если ты его открывал...сам..то по хэндлу окна и закрываешь..посылая сообщенеие - закрыть окно 2)..если не сам..то перебирая окна или надя сразу то ..что надо..(т.е..получив его хэдл), делаешь что и в пункте 1.)) Вопрос: 1) где взять MSDN на русском или хотя бы описание любых API-функций (на русском) 2) Если на первый вопрос ответа нет, то помогите разобраться с функцией GetClassName(1,2,3). Первое яначение я знаю чё значит, а второе и третье нет. Помогите пожайлуста. 3) Чё означает встроенная VB функция String$() и Left$() Ответ: Автор ответа: Андрей Германович 1. MSDN на русском не бывает. кой какие API на русском мона найти на rusproject.narod.ru 2. int GetClassName( HWND hWnd, // handle to window LPTSTR lpClassName, // class name int nMaxCount // size of class name buffer ); соотв: первый - окно, второй - в нем вернется класс окна, третий - длина буфера (скока буковок в lpClassName мона писать) 3. String$(i,ch) вернет строку длиной i символов ch Left$(s,i) вернет подстроку из i символов от строки s начиная слева /Right$ - аналогично справа/ Вопрос: На форме разместил: ProgreeBar, Timer, Image, CommandButon. Выставляю Image.Visible=False. Мне надо сделать так, чтобы при Image.Visible= False, ProgressBar двигался со скоростью 3, а при Image.Visible=True со скоростью 10. Я делаю так: Private Sub Command1_Click() Image1.Visible = False 'По нажатию кнопки картинка становится не видна End Sub Private Sub Timer1_Timer() Static I As Integer I = I + 1 If ProgressBar1.Value = 90 Then Timer1.Enabled = False: MsgBox "Стоп" ' Остановка таймера при достижение ProgressBar'ом 90 If I = 5 Then Image1.Visible = True 'Картинка видна If Image1.Visible = True Then ' Если картинка видна, тогда скорость больше ProgressBar1.Value = ProgressBar1.Value + 10 Else ' Иначи (если картинка не видна), скорость меньше ProgressBar1.Value = ProgressBar1.Value + 3 End If End Sub Все работает в том случае, если я нажму кнопку (т.е востановлю скорость 3 ), а если оставлю на скорости 10, тогда, когда дайдет ProgressBar до конца, выдаст ошибку: '380' Invalid property value. Что это значит, и как это исправить? Ответ: Автор ответа: Nechaev Sergey Просто у тебя максимальное значение для прогресс бара 100, а ты пытаешься установить значения больше ста (когда я опробовал твой код, у меня получилось 102). Поэтому вылетает ошибка. Следует перед присваиванием проверять, не будет ли переполнения и только потом выполнять присваивание. А можно просто отловить ошибку и закрыть на этом вопрос. Так я и сделал. Я переписал этот код вот так. И еще. Я так понял, что тебе надо, чтобы скрытая картинка отображалась через 5 событий timer после нажатия кнопки, ее скрывающей (или с начала выполнения). Я так и сделал. Если я не прав, верни все что связано с переменной I в соответствие со своим оригиналом. Dim I As Byte Private Sub Command1_Click() Image1.Visible = False 'По нажатию кнопки картинка становится не видна I = 0 End Sub Private Sub Timer1_Timer() On Error GoTo er I = I + 1 ' If ProgressBar1.Value = 90 Then Timer1.Enabled = False: MsgBox "Стоп" ' Остановка таймера при достижение ProgressBar'ом 90 If I = 5 Then Image1.Visible = True 'Картинка видна If Image1.Visible = True Then ' Если картинка видна, тогда скорость больше ProgressBar1.Value = ProgressBar1.Value + 10 Else ' Иначе (если картинка не видна), скорость меньше ProgressBar1.Value = ProgressBar1.Value + 3 End If Exit Sub er: If Err.Number = 380 Then Timer1.Enabled = False ProgressBar1.Value = ProgressBar1.Max End If End Sub Ответ: Автор ответа: Артем Кривокрисенко Скорее всего, ошибка вылазит, когда ты ставишь Progressbar1.value=... Наверное, Value ты ставишь большим, чем Max, а этого делать нельзя. Я немного переделал код. Private Sub Timer1_Timer() dim intAdd as integer Static I As Integer I = I + 1 If I = 5 Then Image1.Visible = True intAdd=iif(image1.visible,10,3) If ProgressBar1.Value+ intadd > 90 Then progressbar1.value=progressbar1.max Timer1.Enabled = False MsgBox "????" else ProgressBar1.Value = ProgressBar1.Value + intAdd End If End Sub Ответ: Автор ответа: NeoLord Происходит переполнение максимального значения ProgreeBar'а. Ответ: Автор ответа: Invisible Man "Invalid property value" с анг. "Недопустимое значение свойства". Ошибка происходит из за того что в определенное время ProgressBar1.Value становится больше чем ProgressBar1.Max. ProgressBar1.Max это максимальное допустимое значение ProgressBar1.Value. 1) Первые 4 раза Timer прибавляет к ProgressBar'у по 3 т.е. к 5-му разу ProgressBar1.Value = 12, а потом начинает прибавлять по 10, тут и ёжику ясно что 90 никогда не наступит... А будет сразу 92. По этому вот тут: If ProgressBar1.Value = 90 следовало ставить не "=", а ">=". 2)Строка If ProgressBar1.Value >= 90 Then Timer1.Enabled = False: MsgBox "Стоп" должна стоять не в начале, как у тебя, а наоборот в конце, прямо перед End Sub, или можно сделать так: If ProgressBar1.Value >= 90 Then Timer1.Enabled = False: MsgBox "Стоп": Exit Sub Тады она может стоять как вверху так и внизу... Код будет такой: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Private Sub Command1_Click() Image1.Visible = False End Sub Private Sub Timer1_Timer() Static I As Integer I = I + 1 If ProgressBar1.Value >= 90 Then Timer1.Enabled = False: _ MsgBox "????": Exit Sub If I = 5 Then Image1.Visible = True If Image1.Visible = True Then ProgressBar1.Value = ProgressBar1.Value + 10 Else ProgressBar1.Value = ProgressBar1.Value + 3 End If End Sub 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 'Должно работать... Ответ: Автор ответа: Matrix 1) в случае если необходимо отображение Progress на 90. Замени: If ProgressBar1.Value = 90 Then Timer1.Enabled = False: MsgBox "Стоп" на If ProgressBar1.Value >= 90 Then Timer1.Enabled = False: MsgBox "Стоп" GoTo End_S End If В конце поставь метку End_S: перед End Sub 2) Если необходимо отображение Progress на 100 тогда Замени: If ProgressBar1.Value = 90 Then Timer1.Enabled = False: MsgBox "Стоп" на If ProgressBar1.Value >= 90 Then Timer1.Enabled = False: MsgBox "Стоп" ProgressBar1.Value = 90 End If Все дело в том, что стоит четкое условие на проверку 90 и никакое другое, при этом Progress может и не попасть на это значение, т.е. перепрыгнуть его 89, 92 и т.д. , как в случае, если не нажимать на кнопу, поэтому необходимо выполнить проверку на 90 и более, а далее уже зависит от того, что конкретно необходимо. Я написал два варианта. Ответ: Автор ответа: shadow всего навсего надо заменить: If ProgressBar1.Value = 90 Then ... на: If ProgressBar1.Value > 90 Then ... или: If ProgressBar1.Value > ProgressBar1.Max Then ... Ответ: Автор ответа: Sergey Не люблю я комментировать чужой код, хотя часто приходится это делать. Во-первых нет кода для сбрасывания счетчика в 0, например так: If ProgressBar1.Value = 90 Then Timer1.Enabled = False ProgressBar1.Value = 0 MsgBox "Стоп" Exit Sub End If Во-вторых нигде видно кода для запуска таймера после его первой остановки. И в третьих код: If Image1.Visible = True Then ProgressBar1.Value = ProgressBar1.Value + 10 выглядит опасно с точки зрения безошибочности. Я бы написал так (для произвольного интервала): If Image1.Visible = True Then Dim lValue As Long lValue = ProgressBar1.Value + 10 If lValue >= ProgressBar1.Max Then ProgressBar1.Max = lValue End If Ответ: Автор ответа: Вадим Возможно оно проходит через 90 и не равноему: ProgressBar1.Value =88 а потом ProgressBar1.Value =98 и 108 а ProgressBar1.Max =100 тут и ошибка. Замени If ProgressBar1.Value = 90 на If ProgressBar1.Value => 90 Вопрос: В моей программе 2-я форма становится видимой в определенные моменты времени. Подскажите, как сделать так, чтобы она выводилась поверх всех открытых окон. Ответ: Автор ответа: Артем Кривокрисенко пиши FormSecond.show 1 Ответ: Автор ответа: Ревягин_Алексей Добавь 2 CommandButton (под именем Command1 и Command2). Когда нажмешь первую кнопку, форма поверх всех Private Declare Function SetWindowPos Lib "user32" (ByVal h%, ByVal hb%, ByVal x%, _ ByVal Y%, ByVal cx%, ByVal cy%, ByVal F%) As Integer Const SWP_NOMOVE = 2 Const SWP_NOSIZE = 1 Const flags = SWP_NOMOVE Or SWP_NOSIZE Const HWND_TOPMOST = -1 Const HWND_NOTOPMOST = -2 Private Sub Command1_Click() res = SetWindowPos(Form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, flags) 'Форма on-top End Sub Private Sub Command2_Click() res = SetWindowPos(Form1.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, flags) 'Форма _ non-on-top End Sub Ответ: Автор ответа: Rutshtein Alex Используй API-функцию SetForegroundWindows, либо, если надо поверх всех внутри программы, то form2.show vbmodal Ответ: Автор ответа: RaZoom Если надо, чтобы окно вывелось поверх других и получило фокус ввода, то так: Public Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long SetForegroundWindow frmForm.hwnd Если же надо, чтобы окно оставалось верхним даже тогда, когда теряет фокус, то так: Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Public Const HWND_TOPMOST = -1 Public Const HWND_NOTOPMOST = -2 Public Const SWP_NOMOVE = &H2 Public Const SWP_NOSIZE = &H1 SetWindowPos frmForm.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE отмена этого режима: SetWindowPos frmForm.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE Ответ: Автор ответа: shadow декларируешь: Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long флаги: Private Const HWND_TOPMOST = -1 Private Const SWP_NOMOVE = &H2 Private Const SWP_NOSIZE = &H1 использование (при загрузке или по таймеру или ещё по какому событию - сам сообразишь): SetWindowPos Form1.hWnd, HWND_TOPMOST, 0, 0, 0, 0, флаг если несколько флагов надо: флаг1 Or флаг2, например: SetWindowPos Form1.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Ответ: Автор ответа: Sergey Если ты знаешь ее hwnd (например Form1.hWnd) то это делается так: SetWindowPos Form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE Только не забудь что она будет поверх не только всех окон в твоей программе, но и поверх всех окон запущенных программ (если ты куда-то будешь переключаться) Ответ: Автор ответа: Sergey Можно поступить хитрее: запустить программу которая будешь отслеживать сообщения WM_QUERYENDSESSION или WM_QUERYENDSESSION и после их прихода делать что нужно. Вопрос: Есть сайт заказов на ASP. Полученный заказ отправляется на мэйл. Вопрос: можно ли полученый заказ отправить на факс или распечатать мэйл автоматом при его получении? Ответ: Автор ответа: shadow лучше всего скачай исходник сокета и забирай почту собственно обработчиком. или MAPI... Вопрос: Можно ли запустить мою программу после того как польяователь нажал на кнопку Выключения компьютера или его переяагруяки черея меню Пуск? Примечание: желательно, чтобы код(коды) были под Win98/Me и(или) WinXP. Ответ: Автор ответа: RaZoom Конечно можно! Нужно только подправить user32.dll, а именно функцию ExitWindowsEx так, чтобы она вызывала твою программу. ;) Ответ: Автор ответа: Loki Да зайди на сайт www.vbrain.narod.ru Ответ: Автор ответа: shadow запустить врядли можно, для этого потребуется штоб другая прога это событие отслеживала но можно запустить твою прогу заранее, а действие она выполнит при появлении диалога выключения компа. Простейший вариант (Visible и ShowInTaskbar формы ставиш в False, можно форму за границу экрана загнать и т.д.): Private Declare Function GetForegroundWindow Lib "user32" () As Long Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Private Sub Form_Load() Timer1.Interval = 1000 End Sub Private Sub Timer1_Timer() Dim hw As Long hw = GetForegroundWindow If GetCaption(hw) = "Завершение работы Windows" Then SendKeys ("{ESC}") End Sub Function GetCaption(WindowHandle As Long) As String Dim Buffer As String, TextLength As Long TextLength& = GetWindowTextLength(WindowHandle&) Buffer$ = String(TextLength&, 0&) Call GetWindowText(WindowHandle&, Buffer$, TextLength& + 1) GetCaption$ = Buffer$ End Function Вопрос: Был вопрос: Как програмно изменять свойства звукового файла (*.WAV), такие как качество звука, частота, количество каналов (стерео - моно) и прочее. Получен ответ: Автор ответа: Dr.Max vbstreets.da.ru В разделе "Статьи на английском " Я взял код с Ответ: Автор ответа: Tank Сам недавно закачал несколько кодов, которые при запуске выдавали ошибку типа "Retained is an invalid key..." если у тя таже проблема то открываешь проект блокнотом или Bred и просто удаляешь данный ключ т.е. строчку "Retained 0" после чего программа должна заработать, ну по крайней мере исчезнет ошибка. Вопрос: У меня два вопроса: 1) возможно ли сделать так, чтобы программа меняла свой код сама (переделывала бы себя сама по ходу своей работы) 2) создал я новое меню(динамически), а как им пользоваться (как писать функции которые будут выполнятся при нажатии на созданное меню) где указывается имя динамически-созданного меню или как его и его методы и свойства ещё использовать Код создания меню: Private Declare Function CreatePopupMenu Lib "user32" () As Long Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu _ As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As _ Any) As Long Const MF_STRING = &H0& Dim hMenu As Long Private Sub Form_Load() 'Создаём пустое всплывающие меню hMenu = CreatePopupMenu() 'Добавляем несколько пунктов в меню AppendMenu hMenu, MF_STRING, ByVal 0&, "Hello !" AppendMenu hMenu, MF_STRING, ByVal 0&, ByVal 0& AppendMenu hMenu, MF_STRING, ByVal 0&, "TrackPopupMenu" End Sub пробовал создавать как контрол, но и это не выходит (пишет, что класса VB.Menu нет) В чём тут дело ? Ответ: Автор ответа: Артем Кривокрисенко 1) на www.vbnet.ru есть прекрасная статья Александра Ларина (заняла в конкурсе 1-е место), где он создает язык (RIPL). Очень несложно, и можно изменять код в режиме рантайма. Если неохота лезть на сайт, пиши, я пришлю статью в зипе(17 кб). Здесь, коллега, без субклассинга не обойтись. Тема эта очень обширна, и было бы обременительно (для тех, кто получает файлы рассылки по почте) обсуждать ее в данной рассылке. Поэтому, если действительно очень нужно делать то, о чем ты говорил в вопросе, пиши на Artyom_kr@mail.ru, можно поступить в конференцию SoobchaVB : напиши пустое письмо сюда: VB-On@SoobCha.org Вопрос: как в ресурсы запихнуть готовые диалоги(формы), а потом юзать их оттуда (как MustDie делает с SHELL32.DLL). К примеру я создам одну DLL'ку а потом буду юзать картинки, диалоги оттуда другими программами. Ответ: Автор ответа: Nechaev Sergey картинки запросто добавляются в раздел bitmap или custom файла ресурсов через resourse editor, а вот с диалогами большой облом - это vb а не delphi. Ответ: Автор ответа: Артем Кривокрисенко На VB таких библиотек, как shell32.dll ты не напишешь. Ты можешь писать только библиотеки ActiveX. Вопрос: Подскажите функции для прямой работы с памятью в VB? Я пытаюсь сделать трейнер к игрухе, адреса памяти извесны. Пытался считывать их содержимое GetMem(1,2,4,8) - на GetMem1 выдаётся какая-то белиберда, а на остальных бейсик обрухивается. CopyMemory тоже какуюто фигню выдаёт. Можт я чего неправильно делаю? Private Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen As Long) Private Sub Form_Load() Dim a As Long CopyMemory a, ByVal &H6FA210, 4& MsgBox Str(a) End Sub Ответ: Автор ответа: Anatoliy Цитата из MSDN: The CopyMemory function copies a block of memory from one location to another. VOID CopyMemory( PVOID Destination, // copy destination CONST VOID* Source, // memory block SIZE_T Length // size of memory block );Parameters Destination [in] Pointer to the starting address of the copied block's destination. Source [in] Pointer to the starting address of the block of memory to copy. Length [in] Specifies the size, in bytes, of the block of memory to copy. т.е. ожидаеться два адресса: CopyMemory VarPtr(a), &H6FA210, 4& Ответ: Автор ответа: Андрей Щёкин [darXeth] А игра у тебя случайно запущена не отдельно ? Windows использует раздельную память для всех приложений => для чтения памяти другого процесса надо использовать ReadProcessMemory. Сначала получаешь его Process ID. Затем открываешь его по PID'у с помощью OpenProcess с параметром PROCESS_VM_READ (и PROCESS_VM_WRITE для записи). OpenProcess возвращает тебе дескриптор - hProcess. К нему уже можно применять собственно ReadProcessMemory, которая по сути мало чем отличается от CopyMemory. Или, при надобности, WriteProcessMemory. После операций закрываешь дескриптор с помощью CloseHandle. Все обьявления в API Viewer, надеюсь разбершься - сейчас не могу подробнее. Вопрос: Проблема установки MSDN Приустановке на 97-98% выдаётся ошибка. Close Collection g_Cool collection.Open(collection name)dwError=7 Специалисты помогите разобраться. Ответ: Автор ответа: Артем Кривокрисенко У меня недавно тоже были проблемы с установкой MSDN. Все решилось после переустановки Visual Studio. Ответ: Автор ответа: Владимир Кирко Это известная ошибка. Проявляется, если не ошибаюсь, если Вы ставите MSDN не сразу с каким-либо продуктом, а через пару-другую дней. Бороться так: на C: ищете hhcolreg.dat, удаляете и повторяете установку (второй раз она проходит очень быстро, т.к. файлы не копируются заново, а проверяются на предмет каких нету). Если не поможет посмотрите http://www.sources.ru/msdn/msdn_problems.shtml. Ответ: Автор ответа: Марк Надо вручную удалить следующие файлы и запись в Реестре перед переустановкой: Delete HHCOLREG.DAT and HH.DAT files in the Windows directory. Delete the HHCTRL.OCX file in the Windows System directory. Delete the HHCOLREG.DAT fie in the Widows\Help directory. Then use the Registry Editor (regedit) to remove the desired collection key(s): HKEY_LOCAL_MACHINES\SOFTWARE\Microsoft\HTML Help Collections\Developer Collections\ Вопрос: У меня 3 проблемы: 1. Я пишу одну прогу, в которой должен быть кулбар (CoolBar), на одной панели которого должен быть элемент TabStrip, а на другой обыкновенный тулбар (ToolBar) с кнопками Соядать, Открыть, Копировать и т.д. Прошу объяснить, как на этот кулбар добавлять всякие элементы управления. 2. Эта проблема частично свяяана с первой. Дело в том, что я не могу листать вкладки TabStrip'а в процессе его соядания и придания ему нужной формы. Помогите, пожалуйста, это сделать. 3. Я соядал свой ресурс-файл для этой ялополучной программы, но дело в том, что я не умею с ним обращаться, то есть яагруяить ия него ту же иконку для формы или картинку иянего поместить в ImageBox, подскажите, как это делается. Ответ: Автор ответа: Артем Кривокрисенко 1) поставь на форму кульар поставь на форму тулбар поставь на форму табстрип выдели тулбар, нажми Ctrl+X выдели кулбар, нажми Ctrl+V Тоже самое проделай с табстрипом на кулбаре нажми правой кнопкой мыши, выбери Properties Перейди на вкладку Bands, кнопками влево/вправо выбери нужную панель. Из раскрывающегося списка Child выбери имя контрола, который нужно повесить на эту панель. Точно так же поступай со второй вкладкой. 2) мне кажется, сделать это невозможно Ответ: Автор ответа: Kussmich Элемент управления CoolBar С помощью элемента управления coolBar можно создавать в приложении улучшенные панели инструментов. Для использования этого элемента управления в приложении необходимо подключить к проекту библиотеку Microsoft Windows Common Controls-3 6.0, воспользовавшись диалоговым окном Components (Компоненты), открываемым при выборе команды Components (Компоненты) меню Project (Проект). В отличие от объекта ToolBar, элемент управления CoolBar более универсален и кроме кнопок может содержать другие элементы управления, в том числе и панели типа ToolBar. Усовершенствованная панель представляет собой контейнер, причем он состоит из маленьких контейнеров Band (Полоса), которые являются объектами и непосредственно включают в себя все элементы управления, вводимые в CoolBar. Для создания в проекте панели инструментов типа CoolBar выполните следующие действия: 1. Подключите к проекту библиотеку Microsoft Windows Common Controls-3 6.0, в которой содержится элемент управления CoolBar. 2. Добавьте в родительскую форму объект coolBar, дважды щелкнув мышью кнопку CooiBar на панели элементов управления. 3. Присвойте новой панели инструментов имя cbrTools. 4. Выделите объект CoolBar, нажмите правую кнопку мыши и выберите в появившемся контекстном меню команду Properties (Свойства). Открывается диалоговое окно Property Pages, предназначенное для создания панели типа CoolBar. 5. Используя кнопку Insert Band (Вставить полосу), добавьте на панель инструментов еще несколько объектов Band. Теперь новую панель можно настраивать, добавляя на нее необходимые объекты или удаляя их. Добавим, например, кнопку управления для вызова дочернего окна. Для этого выполните следующие действия: 1. Используя кнопку CommandButton на панели элементов управления, разместите на создаваемой панели инструментов CoolBar кнопку управления. 2. Скорректируйте в окне Properties (Свойства) для созданной командной кнопки следующие свойства: в правый столбец свойства Name введите наименование объекта cbNewCoolBar, в свойство Caption введите текст Новая, который будет размещен на кнопке; в свойство Height кнопки введите значение 300; для свойства тор задайте значение 25. 3. Для создания кода, выполняемого при нажатии новой кнопки на панели инструментов, в окне редактора кода введите следующие команды, осуществляющие вызов дочерней формы: Private Sub cbNewCoolBar_Click () Dim frmNewForm As New frmChildMDI frmCount = frmCount + 1 frmNewForm.Caption = "Дочерняя форма " + Str(frmCount) frmNewForm.Show End Sub 4. Запустите приложение на выполнение. Элемент управления TabStrip Visual Basic позволяет создавать формы, содержащие несколько вкладок. Объекты данного типа выгодно применять в тех случаях, когда необходимо разместить большой объем информации или для удобства пользователя требуется сгруппировать в одном месте основную, наиболее часто используемую информацию, отделив ее от менее важной. Для создания вкладок в форме служит элемент управления TabStrip. Изучим, как разместить данный элемент в форме и настроить его свойства: 1. Откройте форму, в которой вы хотите создать вкладки. 2. Нажмите кнопку TabStrip на панели элементов управления. 3. Установите указатель в форму и, удерживая кнопку мыши в нажатом состоянии, переместите курсор по диагонали так, чтобы получилась рамка размером с форму. 4. Откройте окно свойств созданного объекта. Для этого установите на него курсор, нажмите правую кнопку мыши и выберите в контекстном меню команду Properties. 5. В открывшемся диалоговом окне Property Pages перейдите на вкладку Tabs. 6. Используя кнопку Insert Tab, добавьте в объект TabStrip необходимое количество вкладок. 7. Поле Index указывает номер вкладки, для которой настраиваются свойства. Выбирая поочередно номер нужной вкладки, введите их наименования с помощью свойства caption. 8. Нажмите кнопку ОК для закрытия диалогового окна. Замечание Элемент управления TabStrip не является контейнером. Координаты размещенных в форме элементов управления задаются относительно самой формы, а не элемента управления TabStrip, и при его перемещении остаются на месте. Для того чтобы размещенные в форме элементы не загораживались объектом TabStrip, его необходимо поместить на задний план командой Send to Back. Файл-ресурс В Visual Basic можно работать с файлом ресурсов в исходном коде программы, используя следующие функции: Функция Назначение LoadResString Возвращает текстовые строки LoadResPicture Возвращает объекты типа ярлыков, значков или курсоров LoadResData Возвращает массив данных Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
|||||||||||||||
Выпуск подготовили: |
Сурменок Павел |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||