|
Навигация
|
Главная » Игры Visual Basic (FAQ, исходники)Источник: Visual Basic FAQ выпуск 0 gaidar Оглавление:1.Имитация клика по кнопке на любой форме (Пример: клик по кнопке Пуск) 2.Определение начальной и конечной позиции текста (Пример: определение текста до курсора в окне) 3.Построение графиков функции (Пример: построение графика функции y = x ^ 3 - 12 * x ^ 2 + 3 ^ x) 4.Получение случайного числа в заданном интервале (Пример: получение случайного числа в интервале от 0 до 10) 5.Определение размера файла в байтах (Пример:определение размера файла, определенного пользователем) 6.Считывание всех данных из файла (Пример: считывание информации из файла указанного пользователем). 7.Создания индикатора процесса ( в просторечии ProgressBar-а) Имитация клика по кнопке на любой форме. Пример: имитация клика по кнопке Пуск. >Извините, как можно сымитировать клик по кнопке, расположенной на форме другой программы? Можно ли вообще это сделать? Это достаточно легко сделать. Для начала нужно определиться, на что мы будем нажимать (то есть получить описатель этой кнопочки). Для этого понадобятся функции поиска формы, а также элемента формы. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Для примера я предлагаю сымитировать клик по кнопке Пуск. Тогда нужно объявить следующие константы. Private WndWind As Long ' Описатель окна И при загрузке вашей формы впишем такой код: Private Sub Form_Load() Вот мы и нашли кнопку Пуск. Теперь на нее нужно кликнуть. Т.к. клик - своего рада сообщение посылаемое кнопке, то воспользуемся функцией SendMessage Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Для того чтобы посылать клик, нужно объявить константу (они все обитают в MSDN). Const BM_CLICK = &HF5 Для примера сделаем так: добавим на форму кнопочку, а в нее вставим такой код:Private Sub Command1_Click() Call SendMessage(WbdButton, BM_CLICK, 0, 0) ' Здесь нули, т.к. wMsg и wParam, мне кажется для клика не нужны Вот и все. Теперь при щелчке по нашей кнопке будет разворачиваться меню пуск Листинг: Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Определение начальной и конечной позиции текста Пример: получение текста из текстового поля до курсора и после курсора. >Мне нужно получить символы в текстовой строке идущие до курсора, я получаю начальную позицию текста и конечную позицию текста с помощью функции SendMessage, а как получить символы до курсора - не знаю. Опять функция SendMessage - сговорились вы что ли? Ладно. Самое сложное вы уже сделали, получили начальную и конечную позицию текста. Я тоже это сделал, теперь можно попытаться получить символы в строке до и после курсора. Если вы говорите, что вам их надо получить, тогда давайте выдавать их на печать, типа Print-ом. (До этого сохраняя в переменной, как вам это нужно). Объявляем функцию и константу (кстати я не знал об этом способе применения до вашего письма). Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Поместите на форме текстовое поле Text1, и заполните его текстом, наприме: "Это проверка работоспособности кода". Теперь само событие. Выделение текста заканчивается отпусканием кнопки мышь, тогда и вставим код: Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Так мы получаем текст находящийся до курсора, помещаем его в переменную и выдаем на форму. Листинг: Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Построение графиков функций Пример: построение графика функции y = x ^ 3 - 12 * x ^ 2 + 3 ^ x > Гайдар, объясните идиоту. Как, ну как строить графики?!? Как?????? Для построения графика любой функции очень удобно ввести свои собственные координаты. Т.к. тогда вывод графической информации будет осуществляться там, где вам нужно, без сложных переводов. Причем задать собственную систему координат очень просто. Для этого вам нужно установить значения ScaleHeight и ScaleTop для определения вашей оси ординат (Y). Например, ScaleHeight=-1000 ScaleTop=500 (YI [-500;500]). То есть как бы ScaleTop определяет верхнее значения, а ScaleHeight длину всей шкалы, причем длина определяется отнимая ScaleHeight из ScaleTop. Поэтому ScaleTop должен быть положительным. Для задания оси абсцисс (X) нужно установить ScaleLeft и ScaleWidth. Исходя из предшествующих рассуждений, можно заявить, что ScaleLeft должен быть отрицательным. Также необходимым параметром является DrawWidth, определяющий толщину рисуемой линии. Для примера можно рассмотреть какую-нибудь простенькую функцию и построить ее. Ну, к примеру: y=x^3-12x^2+3^x. Пусть печать происходит прямо из функции: Function Example(ByVal x As Single) Теперь еще нужно построить график. Это мы сделаем по нажатию на кнопку в меню. Сделайте менюшку по вашему вкусу и обязательно поместите там пунк Построить график (name=mnuDraw). Private Sub mnuDraw_Click() <Вообще-то график уже построен, но нужны некоторые доработки, например, в событие Resize формы можно вставить код отвечающий для изменения ваших параметров. Но для нашего примера хватит и этого: Private Sub Form_Resize() Листинг программы построения графика: (Form1,mnuDraw) - необходимые части содержимого формы Function Example(ByVal x As Single) Получение случайного числа в заданном интервале Пример: получение случайного числа в интервале от 0 до 10 >Гайдар, не могли бы вы ответить, как получить случайное число в VB, такое, чтобы оно было где-то между заданным минимальным и максимальным параметром. Прости я пробовал делать это rnd(number) но число получается меньше единицы. А мне для создания игры требуется получать числа от 11 до 444. Возможно ли это на VB, т.к. в Perl есть такая функция, то я думал, что и в VB она может быть. Да вы правы. Но не совсем, т.к. rnd возвращает значение от 0 до единицы [0,1) - если кто помнит школьную математику, то поймет, что ноль в интервал включен, а единица нет. Я не буду рассуждать на тему существования\несуществования истинно случайных чисел. Просто скажу, что при каждом перезапуске программы числа попадаются в той же последовательности, что и при предыдущем запуске. Хотя конечно можно что-то придумать :-). Отвечаю на вопрос. Существует такая известная формула получения случайного числа: Int((maxVal - minVal + 1) * Rnd + minVal), это и есть способ получения случайного числа. Для проверки этого напишем пример. Создадим форму и впишем: Private Sub Form_Click() Это даже программой назвать трудно, кода уж слишком мало! Но это дело можно легко исправить и почти вдвое увеличить длину кода, это мы сделаем чтобы сделать числа еще более случайными. Для того чтобы реализовать механизм генерации случайных чисел впишем следующий код, с событие загрузки формы, т.к. он немного изменен: Листинг: Private Sub Form_Click() Определение размера файла в байтах Пример:определение размера файла, определенного пользователем >Привет сенсеям, а не подскажите как размер файла определить, не открывая его, а то лишний код набивать - лень. Лень - двигатель прогресса. Поэтому в VB есть такая неплохая функция, типа FileLen. Пишете следующее: FileLen("YourFilePath") Листинг Поместите на форме два текстовых окна и кнопку. Private Sub Command1_Click() Считывание всех данных из файла Пример: считывание информации из файла указанного пользователем). >Помогите!!!!! Мне нужно считать в переменную все содержимое файла. Как это быстро сделать. (А еще хорошо бы просто и понятно). Всем бы просто и понятно только и нужно. Ну это сделать элементарно. Код выглядит примерно так: MyData = Input$(FileLen(YourFile),YourFile) ' Конечно сначала его нужно открыть (см. листинг) Листинг: Поместите на форме Command1 и Text1, Text2 (Multiline=True). Private Sub Command1_Click() Создания индикатора процесса ( в просторечии ProgressBar-а) >Простите за идиотский вопрос, я знаю конечно, что и так этой ерунда навалом, но как мне сделать собственный Progress Bar, но не тащить его за программой отдельной библиотекой, а встроить его именно там, где он нужен. Можно без текущих процентов, но желательно, чтобы код был небольшим.Вот требования пошли - чтобы код был небольшим. А когда я гигантов предлагал? Самый простой способ такой - берете картинку (полоску цвет который вам больше нравится), эта картинка и будет вашим прогрессом. Эту картинку мышкой на форме сворачиваете до минимуму (по длине, а по ширине оставьте такой, какая должна быть в конце. Эту полосочку помещаете точно на лейбл, длина и ширина которого совпадает с длиной и шириной развернутой полоски. Ставите BorderStyle = 1 - Fixed Single. Также нужно поместить таймер, в котором это все и будет происходить. Вот и все. Теперь осталось добавить код: Private Sub Timer1_Timer() Для инициализации таймера используем событие Form_Load, а для остановки процесса Form_Click. Для возобновления процесса используем Form_DblClick. Private Sub Form_Click() Листинг Private Sub Form_Click() Анимационный камень российского кинопреткновения. Болезненное устройство ввода. Autodesk представляет цифровые 3D-инструкции по сборке LEGO Brickley. Анатомия атаки: Как я взломал StackOverflow. Вирус атому не страшен: "Лаборатория Касперского" обеспечила защиту Госкорпорации "Росатом". Главная » Игры |
© 2024 Team.Furia.Ru.
Частичное копирование материалов разрешено. |