Visual Basic: новости сайтов, советы, примеры кодов. Выпуск 249.
Информационный Канал Subscribe.Ru |
Visual Basic: новости сайтов, советы, примеры кодов.
Выпуск 249.
VBNet
VBMania
Ссылки: |
Господа!!! читайте MSDN!!! Несколько слов от автора:
Выпуск новый, новый выпуск...
Читайте! Содержание выпуска
Можно ли узнать названия и число таблиц в mdb базе через VB? Вопрос: Можно ли узнать названия и число таблиц в mdb базе через VB? Ответ: Можно через DAO. Открываешь базу методом OpenDatabase, а затем число и названия таблиц можно узнать из коллекции Tables. Павел Сурменок наверх Как убрать кнопоку "закрыть" из правого верхнего угла формы? Вопрос: Подскажите пожалуйста, как убрать кнопочку [X] из правого верхнего угла формы, а кнопки "Свернуть" и "Развернуть" оставить. Или как заблокировать эту кнопку, чтобы юзер не мог на нее нажать. Ответ:
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, _ Можно и так
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
vitarada наверх Как в VBA получить серийный номер диска? Вопрос: Как в VBA получить серийный номер диска? Ответ:
Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" _
vitarada
dim fso, drv, sn Shemyakin, Dmitry наверх Как отлавливать включение/выключение checkbox у DTPicker control? Вопрос: Можно ли каким-то образом отлавливать включение/выключение checkbox у DTPicker control? Ответ:
If IsNull(DTPicker1.Value) Then
Дмитрий Данелия
наверх Как убрать рисунок из Image? Вопрос: Как убрать рисунок из Image? Т.е. сделать так, чтобы Image стал пустым, а предворительно в него был загружен рисунок! Ответ:
Set Image1.Picture = Nothing
Дмитрий Данелия
Image.Picture = LoadPicture()
vitarada наверх Вопрос/Ответ Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы. Вопросы:Автор вопроса: terroristka Ответ ожидается по этому адресу Как сгенерировать случайное число, состоящее из 5 чисел, все из которых будут единицы или нули? Автор вопроса: Сергей Ответ ожидается по этому адресу Надо, допустим, из Text1 перенести все данные в интернет на определеную страницу... Возможо ли такое сделать? Автор вопроса: Евгений Ответ ожидается по этому адресу Как програмно изменять, добавлять или удалять данные, работая с ADODC? Автор вопроса: Tima Ответ ожидается по этому адресу Как в програмном коде произвести создание и открытие базы данных? Если я использую Microsoft Acsess? Т. е. надо создать базу данных в этом формате. Автор вопроса: Tima Ответ ожидается по этому адресу Каким способом можно считывать переменные из файла (например *.txt)? Я только знаю оператор Open, но он мне не подходит, потому что он считывает только одну строчку или файл целиком. Может можно использвать этот файл как-то по другому? В файле у меня написано: chislo=1 nomer=51 siename="Иванов" Как мне присвоить переменным эти значения? Автор вопроса: Tima Ответ ожидается по этому адресу Как считывать информацию из базы данных? Например у меня есть база данных в формате Microsoft Acsess. Как мне присвоить переменным значения этой таблицы: Фамилия Имя Отчество Иванов Иван Иваныч Желательно, бея раяличных компонентов и библиотек. Автор вопроса: Tima Ответ ожидается по этому адресу Мой проект состоит из нескольких форм. Когда я загружаю вторую форму (через первую), то находящийся в ней ListBox опусташается, как это исправить?? Автор вопроса: Tima Ответ ожидается по этому адресу Как разместить flash-анимацию на форму? Автор вопроса: goodroman Ответ ожидается по этому адресу Надо отправить закодированный в Base64 файл. Но я использую неправильные команды (команды для сервера). Какие именно надо использовать? Я использую begin filename. Ну или что-то такое . Файл закодирован правильно! И вообще, опищите по порядку, какие команды надо отправлять серверу. Автор вопроса: Igor Kansafarov Ответ ожидается по этому адресу Есть элемент Picture1 и нужно чтобы из буфера обмена картинка вставлялась в него. Picture1.Picture = LoadPicture(Clipboard.GetData) Данная команда постоянно выдает ошибку "Файл не найден "ХХХХХХ", где ХХХХХХ постоянно изменяющееся число. Подскажите, как определять, что в clipboard имеется картинка (BMP-формат или что-то в этом роде) и если это так, то вставить эту картинку в PictureBox и сохранить в файл, желательно в формате JPG. Автор вопроса: Igor Kansafarov Ответ ожидается по этому адресу Как перезагрузить\выключить компьютер программно в XP? Автор вопроса: Igor Kansafarov Ответ ожидается по этому адресу Label1.caption = "somename@somehost.ru". Как при клике на Label1 запустить почтовую прогу по умолчанию и писать письмо на этот e-mail? Автор вопроса: Липин В. Б. Ответ ожидается по этому адресу Подскажите, как в VB реализовать указанную функцию. Сделана на VC как DLL и работает. Хотелось бы иметь возможность делать подобные манипуляции на VB. // функция преобразования 4 байт в число Float Float Convert(charљ b1,char b2,char b3, char b4) { char Buff[4]; float *pVal, Val; Buff[0]= b1; Buff[1]= b2; Buff[2]= b3; Buff[3]= b4; pVal=(float *)Buff; Val=*pVal; return (Val); } Автор вопроса: Serzh Ответ ожидается по этому адресу Есть прога (исходник), которая показывает список всех запущенных задач (типа как Ctrl+Alt+DeL => Диспетчер задач => Процессы). Как сделать так, чтобы отображались только запущенные приложения (типа как Ctrl+Alt+DeL => Диспетчер задач =>Приложения)? Кто хочет протестировать или просто интересен код - пишите, скину на личку. Автор вопроса: Ruslan Ответ ожидается по этому адресу Срочно нужна библиотека inpout32.dll. Может кто подкинет или ссылку даст. Автор вопроса: Perec Ответ ожидается по этому адресу Можно ли убрать рамку вокруг формы, которая появляется при перемещении формы? Ответы: Вопрос: Как дать проге свой значок, и чтобы он рядом TITLE находился? Ответ: Автор ответа: LeZZvie Смотри свойство Icon у формы. Можешь в рантайме: Me.Icon=Image1.Picture ' рисунок должен быть в соответствующем формате Вопрос: Народ делаю прогу типа пятнашек. Как проверить, когда все цифры (значки) встанут на свои места? Ответ: Автор ответа: A.Nasha Смотря, как они должны встать на места... Если прога сама выравнивает положение значков на форме, то тебе нужно будет просто проверить положение каждого элемента. Если у тебя этого не предусмотрено, то советую предусмотреть :) Ответ: Автор ответа: Роман На примере пятнашек. Кладешь на форму 16 picturebox'ов массивом, а на них - кнопки Сверяешь номера кнопок и picturebox'ов, если совпадают - значит собрано. Вопрос: Что-то я не въехал (это наверно от большого ума), всё говорят о каких-то инсталяторах, без которых ничего не работает. А что, просто экзешник нельзя создать и радоваться жизни? Ответ: Автор ответа: A.Nasha Ты можешь создать экзешник и радоваться жизни. А вот все твои друзья будут грустить, т.к. твоя супер-прога у них скорее всего не пойдет. Причина - отсутствие у них одного очень нужного файлика - MSVBVM60.DLL Вариант - ты можешь засунуть этот файлик в папку с прогой. Но есть еще и различные компаненты ActiveX, которые тебе придется не только класть в папку с прогой, но еще и программно регить в реестре. Так что лучше пользуйся так называемым Инсталятором. Ответ: Автор ответа: Максим Умные люди при написании программ пользуются компонентами, распространяемыми сторонними фирмами (шибко умные пишут их сами). Например, захотел ты воспользоваться в своей программе не прямоугольной, а круглой кнопкой. Ты лезешь на VBNet в раздел Контролы, находишь эту кнопку, вставляешь в проект и посылаешь свой сool.exe другу. Если даже у него и стоит VB, всё равно такого компонента в дистрибутиве Visual Basica нету, поэтому такая программа у него не запустится. Инсталляторы же мыслят более глубоко -они упаковывают вместе с программой все используемые компоненты на случай, если у твоего друга не стоит VisualBasic. Вопрос: Делаю прогу типы пятнашек, как вначале игры случайным образом раскидать значки по полю? Ответ: Автор ответа: Роман Можно для каждого значка случайным образом выбирать позицию и проверять, чтобы эта позиция не была занята. Но в случае пятнашек, при сортировке подобным образом они не всегда складываются. Лучше искать пустое место и передвигать туда значек с одной из сторон. Вопрос: Раньше у меня валялся код для прозрачности формы, создание формы со скругленными краями и т.д.. Он мне не нужен был, а теперь прихватило. Помогите… Ответ: Автор ответа: Максим Могу выслать генератор кода для нестандартных форм. Может генерировать код для создания окружностей и для прямоугольноков, в том числе со скруглёнными углами. Весит всего 18,9 кБ. У меня версия 1.5.21. Можешь в Интернете нарыть поновее. Называется Form Generator. Ответ: Автор ответа: Роман Скругление краев: Public Declare Function CreateRoundRectRgn Lib "gdi32" _ (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, _ ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long Public Declare Function SetWindowRgn Lib "user32" _ (ByVal hwnd As Long, ByVal hRgn As Long, _ ByVal bRedraw As Boolean) As Long В Form_Resize пишешь: Dim lngRgn As Long lngRgn = CreateRoundRectRgn(3, 26, frmMain.Width / Screen.TwipsPerPixelX - 4, frmMain.Height / Screen.TwipsPerPixelY - 5, 9, 9) Call SetWindowRgn(frmMain.hwnd, lngRgn, True) Прозрачность делается по-разному. Вот например: 'This project requires two picture boxes 'Both picture boxes should contain a picture Const AC_SRC_OVER = &H00 Private Type BLENDFUNCTION BlendOp As Byte BlendFlags As Byte SourceConstantAlpha As Byte AlphaFormat As Byte End Type Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal BLENDFUNCT As Long) As Long Private Declare Sub RtlMoveMemory Lib "kernel32.dll" (Destination As Any, Source As Any, ByVal Length As Long) Private Sub Form_Load() 'KPD-Team 2000 'URL: http://www.allapi.net/ 'E-Mail: KPDTeam@Allapi.net Dim BF As BLENDFUNCTION, lBF As Long 'Set the graphics mode to persistent Picture1.AutoRedraw = True Picture2.AutoRedraw = True 'API uses pixels Picture1.ScaleMode = vbPixels Picture2.ScaleMode = vbPixels 'set the parameters With BF .BlendOp = AC_SRC_OVER .BlendFlags = 0 .SourceConstantAlpha = 128 .AlphaFormat = 0 End With 'copy the BLENDFUNCTION-structure to a Long RtlMoveMemory lBF, BF, 4 'AlphaBlend the picture from Picture1 over the picture of Picture2 AlphaBlend Picture2.hdc, 0, 0, Picture2.ScaleWidth, Picture2.ScaleHeight, Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, lBF End Sub Вопрос: Private Sub Command1_Click() Open "c:\1.txt" For Append As #1 Write #1, "text" Close #1 End Sub Используя этот код, получается дописать одну строчку в конце, а не в начале файла как требуется. Помогите решить проблему… Возможно ли строчки в файле сравнивать с записываемыми данными, и если они совпадают, то перемещать строку в начало файла. Возможно ли удалять повторяющиеся или пустые строчки в файле. Ответ: Автор ответа: Роман Для подобных операций лучше сначала считать данные из файла, изменить их, а затем записать. В чем проблема? Вопрос: Как сделать меню, которое открывается при нажатие правой кнопки мыши? Ответ: Автор ответа: Максим Создаёшь обычное меню: Tools-->Menu Editor. Пункты меню по сути ничем не отличаются от Command Buttom: Caption - Название пункта меню Name - Имя Сначало создаёшь кнопку первого уровня, например: Caption - Меню Name - Menu Жмёшь Next, затем на клавишу смещения вправо и создаёшь вложенный элемент, например: Caption - Выход Name - Exit и т.д и сколько тебе угодно. После закрытия редактора меню появляется под заголовком формы. Ткни на него грызуном и во всплывающем списке выбери нужный пункт. Откроется редактор кода, в котором сможешь запрограммировать выбор данного пункта. Например: Private Sub Exit_Click() End End Sub Когда все запрограммируешь, лезешь опять в Tools-->Menu Editor, и снимаешь птичку Visible. Нажатие правой кнопки мыши программируется так: Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button =2 Then PopupMenu Menu End If End Sub Ответ: Автор ответа: Роман Создаешь меню с выключенными флажками Visible и Enable. Private Sub _нужный_элемент__MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) If Button = vbRightButton Then PopupMenu _имя_этого_меню_ End If End Sub Вопрос: Как мне удалить часть текста с конца? Ответ: Автор ответа: Тоша Тип String - это своего рода массив. К нему можно обращаться по индексам. Например, 1 индекс у строки - это ее первый символ. Последний символ имеет индекс Длина (строка), например Len (str). Вот так с конца считываешь (или удаляешь) элементы. Удалять их можно, ставя символ конца строки. Ответ: Автор ответа: C...R...a...S...H Dim str As String str = "123456789" Kol_vo_simvolov_na_udalenie = 3 str = Left(str, Len(str) - Kol_vo_simvolov_na_udalenie) Ответ: Автор ответа: Neco По удалению конца текста (за что же так бедного Текста-то?): Может будет работать это: Mid$(Text,n)="" но наверняка сработает это: text=left$(text,n) Если будут работать оба, то первое, наверное, быстрее... Вопрос: Как мне c подключить directdraw к проекту? Ответ: Автор ответа: Роман Сергей Никифоров DirectX7: Введение в DirectDraw Сегодня мы будем изучать самую главную часть DirectX - DirectDraw, которая отвечает за 2D-графику. Как всегда нам потребуются библиотеки DirectX версии 7(не SDK) или выше. Стащить можно прямо с сайта Microsoft. После данной нехитрой операции можно приступать к программированию. Загрузим Visual Basic, создадим новый проект (Standard EXE). Подключим библиотеки DirectX к проекту: "Project - References - DirectX 7 for Visual Basic Type library". Теперь можно приступить к написанию программного кода: Объявим в General Declarations формы: Dim dx as New DirectX7 'объявляем об использовании DirectX7 Dim dd As DirectDraw7 'объявляем об использовании DirectDraw7. !!! DirectX7 является последней версией на момент написания статьи. Возможно, что мой читатель располагает более поздней версией DirectX и тогда он будет объявляеть Dim dd as DirectDraw8 и т.п. !!! Создадим несколько, так называемых "поверхностей" (surfaces). Поверхности Primary и Back будут служебными, их мы будем использовать для создания back buffer'а (обратного буфера). Intro будет использоваться для создания фона, а Sprites для объекта. Также мы будем использовать ddsd1 и ddsd2 - шаблоны-дескрипторы, которые устанавливают свойства выводимых данных. Dim Primary As DirectDrawSurface7 Dim Back As DirectDrawSurface7 Dim Intro As DirectDrawSurface7 Dim Sprites As DirectDrawSurface7 Dim ddsd1 As DDSURFACEDESC2 Dim ddsd2 As DDSURFACEDESC2 !!! Аналогичная история с версиями DirectX !!! Перед инициализацией неплохо бы написать модуль, который показывал/скрывал курсор мышки. Далее приведён именно он: Declare Function ShowCursor Lib "User32" (ByVal bShow As Long) As Long 'API функция для показа/скрытия курсора Public lShowCursor As Long 'служебные Public lRet As Long 'переменные Public Sub HideMouse() 'Sub, который прячет курсор Do lShowCursor = lShowCursor - 1 lRet = ShowCursor(False) Loop Until lRet < 0 End Sub Public Sub ShowMouse() 'Sub, который показывет курсор Do lShowCursor = lShowCursor - 1 lRet = ShowCursor(True) Loop Until lRet >= 0 End Sub Теперь можно приступить к процессу инициализации DirectDraw. Напишем специальный Sub для этого: Sub Init() On Local Error GoTo errOut 'если происходит ошибка в ходе выполнения всего этого безобразия идём к процессу очистки памяти Call HideMouse 'скрываем курсор, чтобы не мешал Наполняем переменную dd смыслом её жизни: Set dd = dx.DirectDrawCreate("") Только потом показываем форму, а не наоборот! Form1.Show Теперь укажем режим работы. В следующем примере используется разрешение 640x480, 16 разрядов цветов, полноэкранный, расширенный режим. Можно, конечно же, работать и в оконном (DDSCL_NORMAL), но производительность тогда заметно падает. Работа в VGA режиме (DDSDM_STANDARDVGAMODE) нынче тоже совсем не нужна... !!! Если вы хотите использовать 256 цветов, тогда пишите Call dd.SetDisplayMode(640 , 480, 8, 0, DDSDM_DEFAULT) !!! Call dd.SetCooperativeLevel(Me.hWnd, DDSCL_FULLSCREEN Or DDSCL_EXCLUSIVE) Call dd.SetDisplayMode(640, 480, 16, 0, DDSDM_DEFAULT) Установим флажки к дескриптору поверхности Primary. ddsd1.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT ddsd1.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX ddsd1.lBackBufferCount = 1 Устанавливаем параметры поверхности Primary из уже готового шаблона-дескриптора ddsd1. Set Primary = dd.CreateSurface(ddsd1) Наполняем back buffer из уже подготовленной поверхности Primary: Dim caps As DDSCAPS2 caps.lCaps = DDSCAPS_BACKBUFFER Set Back = Primary.GetAttachedSurface(caps) Загружем картинку в поверхность Intro, используя дескриптор ddsd2, для использования её, как фона. Предварительно неплохо бы иметь файл background.bmp в директории проекта. ddsd2.lFlags = DDSD_CAPS ddsd2.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN Set Intro = dd.CreateSurfaceFromFile("background.bmp", ddsd2) Заполним поверхность Sprites из файла sprites.bmp. Дескриптор тот же, т.е. ddsd2. Обратите внимания на то, что я добавил ещё параметры IHeight и IWidth. Его следует использовать, если размер заготовленной картинки меньше размеров, объявленных в dd.SetDisplayMode. В данном случае высота у моей картинки равна 32 пикселям (IHeight), и ширина равна 32 пикселям (IWidht). Если размеры картинки равны объявленным в dd.SetDisplayMode, то IHeight и IWidth можно не указывать. Если бы у меня длина картинки была бы равна указанной в dd.SetDisplayMode, то я бы IWidth и не писал бы. ddsd2.lHeight = 32 ddsd2.lWidth = 32 Set Sprites = dd.CreateSurfaceFromFile("sprites.bmp ", ddsd2) Объявим переменную key, как DDCOLORKEY и укажем ей границу DirectDraw-цвета от 0 до 0. Это означает, что цветом для прозрачности будет абсолютно чёрный. Можно указывать несколько цветов, например от 0 до 10 и т.д. Dim key As DDCOLORKEY key.low = 0 key.high = 0 Sprites.SetColorKey DDCKEY_SRCBLT, key Рисуем спрайты при помощи следующих команд. Их содержимое рассматривается далее. UpdateBack UpdateObject errOut: CleanUp !! Процедуру CleanUp надо добавить и в form_unload !! End Sub Создадим процедуру UpdateObject, которая будет обновлять объект. Sub UpdateObject() Dim ddrval As Long 'буфер для прорисовки спрайта. Dim rcRect As RECT 'тип данных, задающий позицию спрайта Позиции объекта в графическом файле (sprites.bmp) (Left - слева, Top - сверху, Right - справа, Buttom - снизу) rcRect.Left = 0 rcRect.Top = 0 rcRect.Right = 32 rcRect.Bottom = 32 x=0 y=0 Для анимации спрайтов лучше всего использовать метод BltFast. Мы рисуем его на поверхности Back. Переменные x и y - место расположение спрайта на форме. ddrval = Back.BltFast(x, y, Sprites, rcRect, DDBLTFAST_SRCCOLORKEY Or DDBLTFAST_WAIT) End Sub Следующий Sub используется для отрисовки фона: Sub UpdateBack() Dim rcRect As RECT 'уже знакомые нам переменные Dim ddrval As Long Размер фона 640x480: rcRect.Left = 0 rcRect.Top = 0 rcRect.Right = 640 rcRect.Bottom = 480 Теперь рисуем используя картинку, загруженную в поверхность Intro: ddrval = Back.BltFast(0, 0, Intro, rcRect, DDBLTFAST_NOCOLORKEY Or DDBLTFAST_WAIT) End Sub И последний Sub: расчистка, который показывает мышь и восстанавливает видео-режим. Sub CleanUp() Call ShowMouse Call dd.RestoreDisplayMode Call dd.SetCooperativeLevel(Me.hWnd, DDSCL_NORMAL) End End Sub Вопрос: Как программно связать расширения файлов, например, *.lfa, *.lfb с моей программой? Но при этом для каждого расширения необходимо указать свой значок, который берется из exe-файла программы Ответ: Автор ответа: Тоша Используй реестр (HKEY_CLASSES_ROOT): sReg.CreateKey('.Tosha\'); // Создаем необходимые разделы sReg.CreateKey('.Tosha\Shell\Open\Command'); sReg.CreateKey('.Tosha\DefaultIcon\'); sReg.CloseKey; sReg.OpenKey('.Tosha\', False); sReg.WriteString('', 'Супер расширение'); // Объяснения к расширению sReg.CloseKey; sReg.OpenKey('.Tosha\DefaultIcon\', False); // Установка иконки sReg.WriteString ('', Путь к иконке); sReg.CloseKey; sReg.OpenKey('.Tosha\Shell\Open\Command', False); // Настройка команды sReg.WriteString('', Путь к проге +' "%1"'); sReg.CloseKey; Этот код написан для Delphi 6.2. Он элементарный, а главное - посмотри внимательно на пути в реестре, и на параметры, которые туда мы загоняем. Не забудь, что ты должен обробатывать параметр командной строки! (%1) Ответ: Автор ответа: Neco По ассоциации расширений. Вот кусок кода. Сразу хочу сказать, что "копировал-вставил" не получится. Reg это объект моего класса для работы с реестром. Но по крайней мере названия свойств я старался делать "говорящими"... Reg.UsingHKey = HKEY_CLASSES_ROOT Reg.UsingPath = "" Reg.RegType = REG_SZ Reg.CreateKey ".neco" Reg.CreateKey "NewRegShot" Reg.UsingPath = ".neco" Reg.Save "", "NewRegShot" Reg.UsingPath = "NewRegShot" Reg.Save "", "NewRegShot" Reg.CreateKey "shell" Reg.CreateKey "DefaultIcon" Reg.UsingPath = "NewRegShot\shell" Reg.Save "", "patch" Reg.CreateKey "patch" Reg.UsingPath = "NewRegShot\shell\patch" Reg.Save "", "Пропатчить" Reg.CreateKey "command" Reg.UsingPath = "NewRegShot\DefaultIcon" Reg.Save "", App.Path + "\NewRegShot.exe,-1" Reg.UsingPath = "NewRegShot\shell\patch\command" Reg.Save "", App.Path + "\NewRegShot.exe %1" MsgBox "Расширение зарегистрировано.", vbInformation, "Готово" Вопрос: Как создавать приложения на Pocket PC? Ответ: Автор ответа: Максим На .net это делается просто (создать проект smartчегототам), а как на vb6 не знаю. Кажется, есть специальная версия для этого, eVB называется. Вопрос: Проблема следующая: при открытии в Word txt файлов, сделанных в Dos, не получается выравнять строки по ширине. Написать макрос, выравнивающий строки, не проблема. Проблема - как при этом сохранить абзацы. Может быть, кто-то знает ссылку на сайт, где описано решение этой проблемы. Ответ: Автор ответа: Neco По Word'у и невыровн("я" или "е")нным строкам: Если я правильно понял твою проблему, то я и сам с этим сталкивался, но только при распечатке книг и невозможности увеличить плотность текста. Сам текст выглядит так: фыв афы ваф ыфва ф вафы ыфв фы вава фы вафыва а Т.е. каждая строка заканчивается Enter'ом. По этому поводу я написал прогу (не макрос) и сейчас всё работает. Исходил я из того, что каждый абзац начинается с Tab'а или пробела. Соответственно, надо удалить все Enter'ы, кроме нужных. Единсвенный гимор здесь может начаться по причине "неправильных" Enter'ов (не vbCrLf, а vbLfCr, т.е. переставлены символы) и отсутствия отступа в начале абзаца (бывают и такие). С первым я разобрался, а до второго догадался, что надо считать количество символов в строке, но сделать руки не дошли... Надеюсь, я правильно (в тему) и доступно всё объянил... Вопрос: Есть такой код. Проблема в том, что в Windows 98 он работает, а в 2000 и ХР нет. Подскажите, что здесь неправильно. Private Declare Function CreatePolygonRgn Lib "gdi32.dll" (lpPoint _ As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long Private Declare Function SetWindowRgn Lib "user32.dll" (ByVal hwnd _ As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Private Type POINTAPI X As Long Y As Long End Type Dim P(407) As POINTAPI Dim hw As Long hw=me.hwnd 'hWnd формы 'Заполняем массив точек. Данный массив рисует звездочку на форме P(0).X = 124: P(0).Y = 0 P(1).X = 159: P(1).Y = 86 P(2).X = 248: P(2).Y = 86 P(3).X = 183: P(3).Y = 146 P(4).X = 248: P(4).Y = 312 P(5).X = 124: P(5).Y = 199 P(6).X = 0: P(6).Y = 312 P(7).X = 65: P(7).Y = 146 P(8).X = 0: P(8).Y = 86 P(9).X = 89: P(9).Y = 86 P(10).X = 124: P(10).Y = 0 'Вызов этой функции при работе под Win2000 дает 0 'Я менял второй параметр ставил его и 10 и 11, результат один и тот же. Rgn = CreatePolygonRgn(P(0), 10, 0) Call SetWindowRgn(hw, Rgn, True) Ответ: Автор ответа: Сан Саныч Вызвай ф-ию так: rgn = CreatePolygonRgn(P(0), 10, 1) Ответ: Автор ответа: Максим Думаю, не в параметрах дело. Скорей всего, CreatePolygonRgn просто нет в этих операционках. Ответ: Автор ответа: Роман Вместо Rgn = CreatePolygonRgn(P(0), 10, 0) пишите так Const ALTERNATE = 1 Const WINDING = 2 Rgn = CreatePolygonRgn(P(0), 10, WINDING (или ALTERNATE)) Ответ: Автор ответа: Valery Tesher nPolyFillMode - определяет режим заполнения, используемый для определения того, какие пиксели входят в область. Может принимать одно из следующих значений: ALTERNATE Попеременный режим. Закрашиваются только те фрагменты внутренней области многоугольника, которые получаются путем соединения линий с нечетными номерами (1, 3, 5 и т. д.). Другие фрагменты внутренней области не закрашиваются. WINDING Сквозной. Windows закрашивает все внутренние области. Const ALTERNATE = 1 ' ALTERNATE and WINDING are Const WINDING = 2 ' constants for FillMode. В вашем примере Rgn = CreatePolygonRgn(P(0), 10, 0) необходимо 0 заменить на 1 или 2, например: Rgn = CreatePolygonRgn(P(0), 10, 1) Вопрос: Как работают программы вроде ArtMoney? Какими функциями перебирать значения переменных других программ? Если можно, поподробнее описание работы этих функций... Ответ: Автор ответа: Neco Теперь пожалуй буду вставлять тему, а то в прошлый раз так перепутали, что я сам себя тормозом почувствовал... по ArtMoney: ИМХО, из-под Васи это если и возможно (что само по себе уже большой вопрос), то это будет сплошной гимор. Здесь надо использовать Ассемблер или хотя бы С++. Естественно на них лучше писать библии, а из-под VB их потом использовать. Можете заполнить эту форму, либо отослать вопрос СЮДА Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта. |
Выпуск подготовили: |
Сурменок Павел |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||