|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
01.03.2023, 10:31 | #1 | |
Помогите найти работающий код VBA функции GdipDrawString из библиотеки GDIPlus.dll
Регистрация: 14.12.2008
Сообщений: 1,079
|
||
Просмотров: 1742
|
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
|
|||
|
||||
Регистрация: 14.12.2008
Сообщений: 1,079
|
Что обозначает строка:
Код:
Желающие могут попробовать функцию GdipDrawString в действии при нажатии на кнопку "Начертить конструкцию" Только чтобы Excel сразу не "вылетал" поставьте точку останова в модуле "mod_GDIPlus" как показано на картинке. Последний раз редактировалось МишаИнженер, 01.03.2023 в 15:17. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Где? И в самой строке вообще ничего не напрягает?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 14.12.2008
Сообщений: 1,079
|
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
А тот факт, что плюсы слегка, совсем чуть-чуть, отличаются от VBA, не мешает?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 14.12.2008
Сообщений: 1,079
|
Из описания функции GdipDrawString на сайте Microsoft получается, что 2 параметр функции это динамический массив типа String. Размерность этого массива указывается в 3 параметре функции:
Цитата:
А какая длина массива если в строка 2 символа: 2 или 1? В общем декларация функции GdipDrawString в виде: Код:
Параметр Text должен быть массивом! Поэтому правильно должно быть так: Код:
В любом случае вызывает недоумение количество кода, которое надо написать чтобы вывести простую цифру на форму! Это придумали не для того чтобы сделать жизнь людей легче! В этом скрыт другой замысел: сделать жизнь людям более сложной и запутанной! |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
Потому что это VBA) В тех же .Net WinForms есть класс Graphics, который инкапсулирует поверхность рисования GDI+. В нем есть куча методов, например, нарисовать текст DrawString. Реализация этого класса составляет примерно 4500 строк, причем это не вызов самих API функций GDI+ - а обращение к внутренним классам .Net Framework. Так что у вас впереди еще долгий путь реализовать хотя бы часть этого функционала на VBA...
|
|||
|
||||
Инженер-философ Регистрация: 24.04.2019
Хабаровск
Сообщений: 1,876
|
"В программе партии был глючный указатель (с)". Добро пожаловать в мир программирования Pure C/C++!
Например, в объявлении GdipCreateFontFamilyFromName у выходного параметра hFontFamily пропущен модификатор ByRef. Без него параметр передается по значению, то есть вместо настоящего адреса переменной записывается ее значение. И функция внутри GDI+ что-то записывает по этому "как бы адресу". Если повезет - запись произойдет в чужую память, и Windows за такие фокусы прибьет программу. А если не повезет, и значение случайно преобразуется в незащищенный адрес , то GDI+ затрет что-то внутри; вылета не будет, но что именно будет бито - неизвестно: может, какая неиспользуемая область, а может, и рабочая. Такая ошибка может привести к вылету потом, когда к битой области случится запрос; догадаться, что вылет произошел из-за вызванной час назад функции с битым указателем, практически нереально. Собственно, ловить такие глюки - любимое занятие сишников. Такая же фигня еще как минимум с GdipCreateFont/hFont. В объявлении типа RECTF, похоже, Double с Single перепутаны. Сколько еще таких ляпов - даже не знаю, на моем офисе x64 оно не запускается, слишком много надо править. Но, если продолжать мучить бейсика пурсиком, вылетов будет еще море. Тут только один совет - собрать таблицу преобразований типов, вроде <<В Си GpFontFamily** - В бейсике ByRef LongPtr>>, и проверять по три раза каждое объявление. Цитата:
Это придумали для легкой автоматизации офиса, и бейсик такое может. А черчение по форме - это хаки, для тех, кто знает C/WinApi, бейсик тут вообще не при чем. Родной для бейсика метод - найти элемент управления, поддерживающий черчение, и в нем работать. А нет ножек - нет конфетки. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Какой язык перспективен для инженера-конструктора с условием | The_Mercy_Seat | Программирование | 705 | 17.03.2021 14:19 |
Помогите найти СП 31-115-2008 Открытые физкультурно-спортивные сооружения. Часть 4. Экстремальные виды спорта | Aragorn | Поиск литературы, чертежей, моделей и прочих материалов | 2 | 02.12.2010 06:58 |
СНиП 11-10-75. Технология укладки асфальтовой смеси. Помогите найти! | Maxim-t | Поиск литературы, чертежей, моделей и прочих материалов | 5 | 23.09.2010 00:11 |
Помогите найти чертежи православных храмов | leonbka | Поиск литературы, чертежей, моделей и прочих материалов | 5 | 12.03.2010 11:31 |
Помогите найти библиотеки котельного оборудования..Плиззз.. | ФОльга | Поиск литературы, чертежей, моделей и прочих материалов | 0 | 23.01.2008 12:01 |