|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.11.2010, 13:19 | #1 |
Пользователь
Регистрация: 09.11.2010
Сообщений: 12
|
измерение длины строки
Доброго времени суток. Помогите пожалуйста. Мне надо преобразовать макрос ворда в код делфи.
Вот макросы: один Sub Макрос1() Dim ДлинаСтроки As Double ДлинаСтроки = Selection.Information(wdHorizontalP ositionRelativeToTextBoundary) MsgBox ДлинаСтроки End Sub и второй Sub Макрос1() MsgBox ActiveDocument.ActiveWindow.Panes(1 ).Pages(1).Rectangles(1).Lines(1).W idth End Sub Я не понимаю как это реализовать. И ещё вопрос: я из базы данных формирую строку, которую потом вставляю в ворд. Я могу вычеслить сколько в этой строке будет символов. А можно вычеслить сколько она будет занимать места в длину (там в миллиметрах или пикселях)? Последний раз редактировалось Agafon; 11.11.2010 в 13:28. |
11.11.2010, 13:32 | #2 |
Участник клуба
Регистрация: 01.11.2006
Сообщений: 1,051
|
Более подробнее опишите задачу.
Судя по внешнему виду это не наброски макроса с ошибками в синтаксисе Последний раз редактировалось Noor; 11.11.2010 в 13:38. |
11.11.2010, 13:45 | #3 |
Пользователь
Регистрация: 09.11.2010
Сообщений: 12
|
Задача состоит вот в чем. У меня есть вордовский шаблон, который заполняется через дельфи. Данные я беру из базы данных. Некоторые строки, при значениях шрифта по умолчанию, не влизают в отведенное для них место в шаблоне. Я хочу сделать функцию по определению длины строки, если длина больше порогового значения, то чтобы она(функция) уменьшала шрифт.
я это реализовал, если подсчитывать количество символов в строке: Код HTML:
function TWordOut.Print(word: string): integer; var j:array [0..5] of integer; i:integer; begin j[0]:=28; j[1]:=24; j[2]:=22; j[3]:=20; j[4]:=18; j[5]:=16; i:=0; if Length(word)<=105 then begin i:=j[0]; end else if (Length(word)<=150) and (Length(word)>105) then begin i:=j[2]; end else if (Length(word)<=250) and (Length(word)> 150) then begin i:=j[4]; end else if (Length(word)>250) then begin i:=j[5]; end; result:=i; end; 13:48 По поводу макросов. Они вордовские, лично проверял их работоспособность. У нас принято пользоваться кнопочкой "Правка", дабы не плодить посты подряд, друг за другом. Читаем правила. Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе... Уважайте форумчан, и они ответят вам взаимностью... Модератор Последний раз редактировалось mihali4; 11.11.2010 в 13:50. |
11.11.2010, 13:52 | #4 |
Участник клуба
Регистрация: 07.07.2007
Сообщений: 1,518
|
Логичнее использовать не Length(), а TextWidth(), т.е. считать не количество
символов, а количество пикселей. |
11.11.2010, 14:10 | #5 | |
Пользователь
Регистрация: 09.11.2010
Сообщений: 12
|
Цитата:
У меня не получается использование метода TextWidth(), так как он относится к конве, мне пришлось его прописать: Canvas:=TCanvas.Create; TextWD:=inttostr(Canvas.textwidth(D ocs)); Canvas.Free; но выдается ошибка: "Canvas does not allow drawing" В общем не могу понять, но не получается работать с конвой. Может есть какая-нибудь альтернатива? Последний раз редактировалось Agafon; 11.11.2010 в 14:41. |
|
11.11.2010, 15:09 | #6 |
Участник клуба
Регистрация: 07.07.2007
Сообщений: 1,518
|
Код:
|
11.11.2010, 15:13 | #7 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
используй канву формы например.
только шрифт настроить не забывай. а если у тя одна строка состоит из многих, то лучше юзай TStringList. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Объединить 2 макроса в 1 | 1134 | Microsoft Office Excel | 5 | 07.07.2010 16:09 |
доработка макроса | Kate-Rina | Microsoft Office Excel | 1 | 02.04.2010 05:33 |
Создание макроса | SeregaSled | Microsoft Office Access | 2 | 28.12.2009 05:55 |
Приоритет макроса | ru3000 | Microsoft Office Excel | 4 | 02.09.2009 04:45 |
Запуск макроса с параметрами из другого макроса | Saladin | Microsoft Office Excel | 2 | 19.01.2009 09:43 |