GlobalAlloc - Кто сказал что в VB нельзя работать шустро со строками? Вот живое доказательство, что можно ускорить в десятки раз скорость работы с помощью АПИ функций. P.S. Не знаю кому и зачем это может понадобиться, но хоть будет меньше возмущений о тормознутости VB!
Traffic - Пример иллюстрирует работу со статистикой соединения в 95/98/Me/2k/XP/2k3... ну и выше... вероятно ;) Измерение (в байтах) входящего/исходящего трафика, Получение скорости подключения, Вычисление текущей скорости закачки/выгшрузки, и прочее...
Road Monster v2.00 - В этой версии доступен один вид оружия, но у меня, к сожалению, не получилось решить проблему со столкновением и выводом текста(мерцает). Кому не лень, помогите. Следующая версия будет иметь 3 вида оружий, и еще что-нибудь...
Вот грызу этот камень под названием VB.Net и не могу понять, что такое Делегаты.
Не понятно как они используются и как они работают, знаю, что они как-то связаны с событиями, но как конкретно это всё работает не пойму. И вообще какие функции они выполняют и для чего они предназначены. Может кто-то объяснит или кинет ссылку, где ясно и подробно рассматривается этот вопрос, а то в книжках как-то мутно и поверхностно это всё описывается, что складывается впечатление, что это специально так описано, чтобы читатель ничего не понял из того что там написано.
Ответы:
Автор: Павел
Делегат - это ссылка на функцию обратного вызова.. Зачем это может быть нужно? Например, подчинённый объект хочет сообщить какую-нть инфу родителю. Как это сделать? Можно через интерфейсы.. А можно через делегат:
'Код подчинённого класса
Public Class Class2
'Сам делегат
Public Delegate Sub MyDelegate (ByVal Argument As String)
'Ссылка на экземпляр
Public DelHandler As MyDelegate
Public Sub DoSomeWork ()
...
'Сообщаем родителю инфу
DelHandler.Invoke (New String() {"Привет от Class2!"})
...
End Sub
End Class
'Код родительского класса
Public Class Class1
Public Sub Start ()
'Создаём экземпляр Class2
Dim c2 As New Class2
'Устанавливаем ссылку на делегат
c2.DelHandler = New MyDelegate (AddressOf MyHadler)
'Запускаем некую процедуру
c2.DoSomeWork
End Sub
Public Sub MyHandler (ByVal Argument As String)
Console.WriteLine (Argument)
End Sub
End Class
При запуске процедуры Start класса Class1 будет создан экземпляр Class2, установлена ссылка на делегат. В методе DoSomeWork в Class2 мы вызываем этот делегат с помощью метода Invoke, в результате чего вызывается процедура MyHandler класса Class1, потому что она была указана при вызове консруктора делегата MyDelegate.
События - это своего рода надстройка над делегатами...
'очень нужно, чтобы при выполнении программы не работала кнопка "Windows" (Кнопа на клаве с эмблемой окон:)) т.е. не вылаяил Пуск. Пробую следующий код - не работает :(
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Label1 = KeyCode 'так, для себя уянал какой код у этой кнопы
If KeyCode = "91" Then AppActivate "form1", 1 'Если кнопа нажата, то по идее фокус должен передаваться моей проге...
End Sub
Кто может подсказать, есть ли библиотеки для работы с комплексными числами в VB (если можно ссылку) ?
Ответы:
Вопрос:
Я работаю над интерфейсом БД, содержащей около полумиллиона записей и содержащей 2 таблицы (*.dbf).
Выборка по некоторым критериям занимает достаточное время. Хотелось бы чтобы на время выборки включался ProgressBar, который или реально отслеживал бы выборку, или, хотя-бы, эмулировал в цикле заполнение и сброс ProgressBar, что-бы пользователь знал, что программа не висит. Я видел такое в некоторых программах.
Вот пример кода:
SQL1 = "SELECT . . . FROM . . . INNER JOIN STREETS ON . . . WHERE " & crit
' Где crit - критерий поиска
Set rec = db.OpenRecordset(SQL1)
Form1.Show 'Вызов формы с предупреждением "Ждите, идет поиск"
Form3.Show vbModal 'Вызов формы 3 показа результата поиска
Unload Form1
Если речь заходит о DBF-файлах, то в этом случае MS адресует за такими вопросами к держателю DBF, т.е. конкретно к Борланду, т.к. для этого надо поддерживать конкретный метод доступа, а основной метод доступа у MS сейчас OLE в ADO и она не может обеспечить полноценную поддержку DBF, собственно, это слишком морально старый формат, который не дотягивает до современного уровня, поэтому и адресует... А вот, для своего родного MS Jet, Server и ещё чего - это пожалуйста: при долгих операциях в них есть ключики для обратной связи (читай в MSDN). И это нормально. А "Борман" не то что DBF поддержать не в силах, он совсем запутался в BDE...
Вопрос:
Необходимо в отчете внести нумерацию попадающих в отчет записей (строк). Как это сделать?
Подскажите, пожалуйста, как в запрос на выборку вставить порядковый номер отобранной строки.
1. Желательно организовать хранение ваших записей в виде некоторого набора записей средствами ADO. Зачем нам какие-то потусторонние средства? Это может быть либо таблица, либо сплетение таких таблиц, именуемое запросом или курсором и т.д. в зависимости от обстоятельств.
2. В полученном наборе у вас должен быть назначен элемент, отвечающий за номер строки, как правило, это какой-то авоматический идентификатор класса счётчика, например: "CREATE TABLE НоваяТаблица (Имя CHAR, Фамилия CHAR, Страховка INTEGER CONSTRAINT Ключ1 PRIMARY KEY);"
3. Для отметки "о выполнении" можете ещё сопровождать поле идентификатора сопряжённым с ним полем "выполнено" класса Boolean ("... Выполнено BOOLEAN...").
4. Дальше - понятно. Сделали - отметили, что сделали, а номер строки - вот он - идентификатор!
Типа "UPDATE Сотрудники SET Выполнено = TRUE WHERE Ключ1 = 2;"
Вопрос:
Как осуществить ввод и (или) изменение данных в связанных таблицах реляционной базы данных?
Если у тебя есть select с join-ом и база на MS SQL Server-e и ты хочешь сделать update для набора записей, то такая фигня не прокатит. Придется написать несколько update-ов ручками. Зато такой вариант пройдет в Access-e и в Oracle.
Вопрос:
Кто-нибудь знает, как снизить загрузку проца при длительном приеме (передаче) данных через WinSock, а то у меня уже при 8-ти работающих экземплярах Winsock'а, связанных с восемью разными компами (я пытаюсь сделать один распределенный алгоритм...) процессор загружен на 100% (!) и все восемь экземпляров начинают работать с периодическими остановками в приеме (передаче) данных. Для эксперимента я в цикле DO...LOOP на удаленную машину отправлял один символ, а удаленная машина, получив его, его же отправляла мне обратно и процесс повторялся.
Пробовал экспериментировать и вместо OCX-компонента WinSock'а использовал чистый API - результат тот-же! Может это такая особенность VB6 пожирать ресурсы при работе WinSock? Для сравнения: всем известный RemoteAdministrator (версии 2.1) при передаче целого экрана (!) удаленной машины с частотой сканирования 100 раз в секунду при 65536 цветах съедает всего лишь 3-5% ресурсов проца. Если кто знает, как с этим бороться - подскажите!
Я думаю что дело в том что ты отправляешь данные в циклею Когда выполняется цикл машина загружается на 100%. И дело вовсе не в ВинСоксе. Попробуй вместо цикла использовать таймер. Установи необходимый интервал, если надо сто раз в секунду то ставь 10. Тогда загрузка должна упасть.
'А что ты хочешь полуть используя Do Loop?
'Do Loop - это бесконечный цикл.
'Допустим наберем:
Do
DoEvents
Loop
'загрузка 100%
'Используй систему сообщений на которых основано
'программирование под Windows.
'Например обрабатывай сообщения от таймера
Удовольствия мало, особенно при работе с BLOB
Идешь на www.mysql.com, скачиваешь MyODBC
Создаешь источник ODBC на базу данных в MySQL
В проекте подключаешь ADO, настраиваешь соединение на созданный источник - и вперед.
В Data Sources (ODBC) создаешь источник с драйвером MySQL, заполняешь форму соединения к базе.
Дальше как обычно в VB (можно работать с источником как с mdb базой).
PS: ODBC 3.51 - еще не ставил а ODBC 2.50 пользуюсь давно
Можете заполнить эту форму, либо отослать вопрос СЮДА
Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.