powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6 + win7 + SetTextJustification
16 сообщений из 16, страница 1 из 1
VB6 + win7 + SetTextJustification
    #37952087
ornitopter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток всем!

Собратья, помогите советом или делом или еще чем-нибудь.
Дело такое:
В программе на VB6 для печати неких документов используется api-функция SetTextJustification для выравнивания текста по ширине. До недавнего времени, пока программа запускалась на ХР, все было замечательно, так как функция прекрасно выполняла свою задачу как при выводе текста на принтер, так и при выводе его же на экранную форму. Теперь же, с переходом на Windows 7, происходит что-то непонятное. Функция прекрасно отрабатывает при выводе текста на экранную форму, но ничего не делает при выводе на принтер (причем, не важно какой: реальный или виртуальный, типа MS Image Writer или какой-нить goPdf). Кто-нибудь сталкивался с подобной проблемой? Или есть какие-нибудь соображения по этому поводу?

...and the Hades came close behind him... (Revelations 6:8)
...
Рейтинг: 0 / 0
VB6 + win7 + SetTextJustification
    #37952233
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Win7 и VB6 - непонятное сочетание. Надо что то менять.
...
Рейтинг: 0 / 0
VB6 + win7 + SetTextJustification
    #37952356
ornitopter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть более конструктивные и менее схоластические идеи?
...
Рейтинг: 0 / 0
VB6 + win7 + SetTextJustification
    #37952378
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть. А есть что то конкретное в коде? Что за программа и зачем она нужна? Почему апи? И зачем VB6? На Win7 многое работает не так как на хрюше.
...
Рейтинг: 0 / 0
VB6 + win7 + SetTextJustification
    #37952534
ornitopter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VB6 - потому что так исторически сложилось )
Программа нужна, как уже говорилось, для печати документов.
API-функция - потому что по-другому сделать выключку никак нельзя. Вру, можно, но для этого потребуется провести злобные вычисления положения каждого слова (или буквы) в каждой строке блока текста с учетом ширины пробелов так, чтобы блок текста выравнивался по ширине.

Объявлено так:
Код: vbnet
1.
Private Declare Function SetTextJustification& Lib "gdi32" (ByVal hDC As Long, ByVal nBreakExtra As Long, ByVal nBreakCount As Long)



Вызывается так:
Код: vbnet
1.
2.
3.
SetTextJustification(DC, LineWidth - CalcStringSize(DC, OutputString).X, BreakCharCount)
DrawText DC, OutputStringWrite, Len(OutputStringWrite), currRect, lA
SetTextJustification DC, 0, 0



если DC = Form1.hDC, то на форме все ОК
если DC = Printer.hDC, то на листе вместо блока текста, выровненного по ширине, получаем блок текста, выровненный по левому краю
...
Рейтинг: 0 / 0
VB6 + win7 + SetTextJustification
    #37952599
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вывести на форму, скопировать на принтер как картинку.
...
Рейтинг: 0 / 0
VB6 + win7 + SetTextJustification
    #37952623
ornitopter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyВывести на форму, скопировать на принтер как картинку.

Я даже в голос посмеялся. Объем печати - миллионы листов. С таким костылем это будет долго )))
...
Рейтинг: 0 / 0
VB6 + win7 + SetTextJustification
    #37952628
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОбъявлено так:
Private Declare Function SetTextJustification& Lib "gdi32" (ByVal hDC As Long, ByVal nBreakExtra As Long, ByVal nBreakCount As Long) As Long? Сама?
...
Рейтинг: 0 / 0
VB6 + win7 + SetTextJustification
    #37952638
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ornitopterЯ даже в голос посмеялся. Объем печати - миллионы листов. С таким костылем это будет долго )))ornitopterVB6 - потому что так исторически сложилосьВ свою очередь посмеялся над выбором инструмента для решения такой задачи.


Копайте в сторону настроек dc.
...
Рейтинг: 0 / 0
VB6 + win7 + SetTextJustification
    #37952652
ornitopter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyВ свою очередь посмеялся над выбором инструмента для решения такой задачи.

Копайте в сторону настроек dc.

До перехода на Win7 инструмент справлялся с задачей полностью ))

И можно по-подробней на счет настроек DC? Какие именно?
...
Рейтинг: 0 / 0
VB6 + win7 + SetTextJustification
    #37952778
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у вас случаем на x64 операционка?
есть подозрение, что причина в том, что данная ф-я находится в библиотеке gdi32.
аналогичная проблема может проявляться и в Vista.
скорее всего проблема драйвера принтера
...
Рейтинг: 0 / 0
VB6 + win7 + SetTextJustification
    #37952806
ornitopter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneу вас случаем на x64 операционка?

Проверяли уже ) Разрядность значения не имеет. Одинаково не работает как на 32- так и на 64-битных семерках. В Висте не проверяли - по причине отсутствия таковой.
...
Рейтинг: 0 / 0
VB6 + win7 + SetTextJustification
    #37952813
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поищите в гугле, там кто-то на немецком форуме вроде отписывал по аналогичному случаю, может поможет
...
Рейтинг: 0 / 0
VB6 + win7 + SetTextJustification
    #37952980
ornitopter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все чудесатее и чудесатее ))
вот так
Код: vbnet
1.
TextOut DC, currRect.left, currRect.top, OutputStringWrite, Len(OutputStringWrite)


работает

почему раньше DrawText прекрасно работал с SetTextJustification как для DC экранных форм, так и для DC принтера? загадка.
...
Рейтинг: 0 / 0
VB6 + win7 + SetTextJustification
    #37953391
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ornitopter,

SetTextJustification function

> бла-бла-бла
> ...
> Return value
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.

> Remarks
> The break character is usually the space character (ASCII 32), but it may be defined by a font as some other character.
> The GetTextMetrics function can be used to retrieve a font's break character.

and so on...
...
Рейтинг: 0 / 0
VB6 + win7 + SetTextJustification
    #37956633
ornitopter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скукотищаthe return value is nonzero.


всегда, как при использовании DC формы, так и при использовании DC принтера.
да и break character у шрифта Arial не отличается от пробела
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6 + win7 + SetTextJustification
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]