Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2010, 13:19   #1
Agafon
Пользователь
 
Регистрация: 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.
Agafon вне форума Ответить с цитированием
Старый 11.11.2010, 13:32   #2
Noor
Участник клуба
 
Аватар для Noor
 
Регистрация: 01.11.2006
Сообщений: 1,051
По умолчанию

Более подробнее опишите задачу.
Судя по внешнему виду это не наброски макроса с ошибками в синтаксисе

Последний раз редактировалось Noor; 11.11.2010 в 13:38.
Noor вне форума Ответить с цитированием
Старый 11.11.2010, 13:45   #3
Agafon
Пользователь
 
Регистрация: 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.
Agafon вне форума Ответить с цитированием
Старый 11.11.2010, 13:52   #4
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Логичнее использовать не Length(), а TextWidth(), т.е. считать не количество
символов, а количество пикселей.
_SERGEYX_ вне форума Ответить с цитированием
Старый 11.11.2010, 14:10   #5
Agafon
Пользователь
 
Регистрация: 09.11.2010
Сообщений: 12
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Логичнее использовать не Length(), а TextWidth(), т.е. считать не количество
символов, а количество пикселей.
Это хорошо, а как потом определить сколько пикселей в одной строке?

У меня не получается использование метода TextWidth(), так как он относится к конве, мне пришлось его прописать:
Canvas:=TCanvas.Create;
TextWD:=inttostr(Canvas.textwidth(D ocs));
Canvas.Free;

но выдается ошибка: "Canvas does not allow drawing"

В общем не могу понять, но не получается работать с конвой. Может есть какая-нибудь альтернатива?

Последний раз редактировалось Agafon; 11.11.2010 в 14:41.
Agafon вне форума Ответить с цитированием
Старый 11.11.2010, 15:09   #6
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Код:
procedure TfrmMain.RzBitBtn5Click(Sender: TObject);
begin
  Canvas.Font.Name := 'Arial';
  Canvas.Font.Size := 14;
  ShowMessage(IntToStr(Canvas.TextWidth('Проба')));
end;
_SERGEYX_ вне форума Ответить с цитированием
Старый 11.11.2010, 15:13   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

используй канву формы например.
только шрифт настроить не забывай.
а если у тя одна строка состоит из многих, то лучше юзай TStringList.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединить 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