Попытка работать с Detail c ResizeText
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Попытка работать с Detail c ResizeText
Ну а чего мучиться? Экспорт в WinWord, он сам проставит все переносы как надо. Можно потом и пользователю дать возможность что-то там исправить.
We are hard at work… for you. 

Попытка работать с Detail c ResizeText
да уж все нарисовано с большими мучениями, остается одно это поле с названием услуги победить.kreator писал(а):Ну а чего мучиться? Экспорт в WinWord, он сам проставит все переносы как надо. Можно потом и пользователю дать возможность что-то там исправить.
И, все же можно каким то образом узнать в рантайме какая часть текста уместилась в видимой части String ?
Попытка работать с Detail c ResizeText
GetTextExtentPoint32 поможет узнать длину строки в пикселях, т.е. какая часть строки поместится в контроле или узнать длину контрола для вывода всей строки
Попытка работать с Detail c ResizeText
Интересно попробовать... Описание ф-ии нашел, а вот как вызвать ? Не опишите примерчик ?PavelNK писал(а):GetTextExtentPoint32 поможет узнать длину строки в пикселях, т.е. какая часть строки поместится в контроле или узнать длину контрола для вывода всей строки
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Попытка работать с Detail c ResizeText
В файле abprpdf.clw есть и описание и работа с ней. Не уверен, что это правильный путь, функция для работы с экраном, а не с отчётом (в отчёте единицы - дюймы и мм, а функция возвращает значения в экранных единицах).
We are hard at work… for you. 

Попытка работать с Detail c ResizeText
Путь-то правильный, единицы переводятся и в дюймы и в мм. Лично юзал, все работает.
Описание есть здесь https://msdn.microsoft.com/ru-ru/librar ... s.85).aspx.
Если найду пример, то напишу.
Описание есть здесь https://msdn.microsoft.com/ru-ru/librar ... s.85).aspx.
Если найду пример, то напишу.
Попытка работать с Detail c ResizeText
В смысле там есть описание функции и ссылка на пример использованияPavelNK писал(а):Путь-то правильный, единицы переводятся и в дюймы и в мм. Лично юзал, все работает.
Описание есть здесь https://msdn.microsoft.com/ru-ru/librar ... s.85).aspx.
Если найду пример, то напишу.
Попытка работать с Detail c ResizeText
Мда.... без бутыл..., т.е. примера наверно не разобраться.
Надо ли программно создавать шрифт ? Что такое первый параметр hdc- Дескриптор контекста устройства в применении к репорту и как его получить... через GetDC() ?
Например в репорте в нем есть некий контроль String с USE переменной, скажем l:Name, в которой задан текст.
Может ли GetTExtExtentPoint32 вернуть размеры строки этого контроля - неважно вмещается строка в контроль или нет ?
Надо ли программно создавать шрифт ? Что такое первый параметр hdc- Дескриптор контекста устройства в применении к репорту и как его получить... через GetDC() ?
Например в репорте в нем есть некий контроль String с USE переменной, скажем l:Name, в которой задан текст.
Может ли GetTExtExtentPoint32 вернуть размеры строки этого контроля - неважно вмещается строка в контроль или нет ?
Попытка работать с Detail c ResizeText
Блин! Не могу найти пример.
Контекст, получаешь через GetDC. Затем вызываешь
BOOL GetTextExtentPoint32(
_In_ HDC hdc,
_In_ LPCTSTR lpString,
_In_ int c,
_Out_ LPSIZE lpSize
);
в структуре lpSize получаешь размер
Контекст, получаешь через GetDC. Затем вызываешь
BOOL GetTextExtentPoint32(
_In_ HDC hdc,
_In_ LPCTSTR lpString,
_In_ int c,
_Out_ LPSIZE lpSize
);
в структуре lpSize получаешь размер
Попытка работать с Detail c ResizeText
Комп глюкнул, не дописал.
Шрифт специально создавать не нужно, он уже задан. Менять его можно как средствами API, так и Кларионом, он тоже работает через API.
Шрифт специально создавать не нужно, он уже задан. Менять его можно как средствами API, так и Кларионом, он тоже работает через API.
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Попытка работать с Detail c ResizeText
Посмотри abprpdf.clw из официальной поставки, там всё написано. Только не всё так просто, там перевод PPI в DPI, и ещё какая-то хрень.Андрей писал(а):Мда.... без бутыл..., т.е. примера наверно не разобраться.
We are hard at work… for you. 

Попытка работать с Detail c ResizeText
Да, не разбираюсь в этих низкоуровневых.... ну может примерчиком для репорта когда нибудь кто поможет - переделаю....
А сегодня на скорую руку сделал, через одно место....))) , но работатет !
Опишу сей корявый способ, может кому пригодится...
В общем, так -
1. измерил относительную ширину всех рус. символов в используемом шрифте
Для этого в тестовом репорте выводил все символы, каждый в цикле, чтоб посмотреть сколько умещается в строку и не считать с карандашом l:Kol - показывает сколько символов выводится в строке (этот цикл уже 2-й, для небуквенных символов)
Загнал полученные рез-ты (визуально полученные) в массив, типа:
2. Вывел в реальном отчете в той строке с которой воюю, строку полностью заполненную неким образцовым символом (скажем "б") - посмотрел, сколько влезло - получилось 33.
3. Ну а дальше понятно - каждый символ через к-ты перевожу с образцовому и смотрю, когда нужно делить наименование
Попробовал - вроде как нормально переносит, надо только с висячими символами во 2-й строке поработать
А сегодня на скорую руку сделал, через одно место....))) , но работатет !
Опишу сей корявый способ, может кому пригодится...
В общем, так -
1. измерил относительную ширину всех рус. символов в используемом шрифте
Для этого в тестовом репорте выводил все символы, каждый в цикле, чтоб посмотреть сколько умещается в строку и не считать с карандашом
Код: Выделить всё
Loop i#=32 to 59
l:Stroka=''
Loop j#=60 to 320
l:Kol=j#
l:Stroka=all(chr(i#),j#)
print(rpt:detail1)
end
end
Загнал полученные рез-ты (визуально полученные) в массив, типа:
Код: Выделить всё
l:KolSimv[192]=103 !А
l:KolSimv[193]=103 !Б
l:KolSimv[194]=103 !В
l:KolSimv[195]=120 !Г
l:KolSimv[196]=103 !Д
l:KolSimv[197]=103 !Е
l:KolSimv[198]=72 !Ж
3. Ну а дальше понятно - каждый символ через к-ты перевожу с образцовому и смотрю, когда нужно делить наименование
Код: Выделить всё
RazobrStr ROUTINE
l:VidPlat1=''
l:VidPlat2=''
l:dl=0
fl2#=0
l:PatternKol=l:KolSimv[225]
len#=len(vyvq:NameUsl)
loop jj#=1 to len#
l:dl+=l:PatternKol/l:KolSimv[VAL(VyvQ:NameUsl[jj#])]
If l:dl>33
l:VidPlat2=VyvQ:NameUsl[jj#:Len#]
l:VidPlat1=VyvQ:NameUsl[1:jj#-1]
fl2#=1
break
end
END
if fl2#=0
l:VidPlat1=VyvQ:NameUsl.